admin-auth
All checks were successful
Deploy on push / deploy (push) Successful in 3m3s

This commit is contained in:
2025-09-29 16:08:58 +03:00
parent f2398d3592
commit 504152981b

View File

@@ -66,24 +66,33 @@ interface AuthProviderProps {
export const AuthProvider: Component<AuthProviderProps> = (props) => {
console.log('[AuthProvider] Initializing...')
const [isAuthenticated, setIsAuthenticated] = createSignal(checkAuthStatus())
// Начинаем с false чтобы избежать мерцания, реальная проверка будет в onMount
const [isAuthenticated, setIsAuthenticated] = createSignal(false)
const [isReady, setIsReady] = createSignal(false)
// Флаг для предотвращения повторных инициализаций
let isInitializing = false
console.log(
`[AuthProvider] Initial auth state: ${isAuthenticated() ? 'authenticated' : 'not authenticated'}`
)
console.log('[AuthProvider] Initial auth state: not authenticated (will check via GraphQL)')
// Инициализация авторизации при монтировании
onMount(async () => {
// Защита от повторных вызовов
if (isInitializing) {
console.log('[AuthProvider] Already initializing, skipping...')
return
}
isInitializing = true
console.log('[AuthProvider] Performing auth initialization...')
// 🍪 Для httpOnly cookies проверяем авторизацию через GraphQL запрос
try {
console.log('[AuthProvider] Checking authentication via GraphQL...')
// Добавляем таймаут для запроса
const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => reject(new Error('Auth check timeout')), 10000)
// Добавляем таймаут для запроса (5 секунд для лучшего UX)
const timeoutPromise = new Promise((_, reject) =>
setTimeout(() => reject(new Error('Auth check timeout')), 5000)
)
const authPromise = query<{ me: { id: string } | null }>(
@@ -118,6 +127,7 @@ export const AuthProvider: Component<AuthProviderProps> = (props) => {
// Всегда устанавливаем ready в true, даже при ошибке
console.log('[AuthProvider] Auth initialization complete, ready for requests')
setIsReady(true)
isInitializing = false
}
})
@@ -149,6 +159,10 @@ export const AuthProvider: Component<AuthProviderProps> = (props) => {
const logout = async () => {
console.log('[AuthProvider] Attempting logout...')
// Предотвращаем повторные инициализации во время logout
isInitializing = true
try {
// Сначала очищаем токены на клиенте
clearAuthTokens()
@@ -174,6 +188,8 @@ export const AuthProvider: Component<AuthProviderProps> = (props) => {
console.error('[AuthProvider] Logout error:', error)
// При любой ошибке редиректим на страницу входа
window.location.href = '/login'
} finally {
isInitializing = false
}
}