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