This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user