Добавлены модели и функциональность для управления администраторами, включая авторизацию через JWT, запросы и мутации для получения информации об администраторах и управления пользователями. Обновлены стили и логика работы с токенами в Apollo Client. Улучшен интерфейс взаимодействия с пользователем.

This commit is contained in:
Bivekich
2025-07-19 14:53:45 +03:00
parent f24c015021
commit 6287449521
26 changed files with 3931 additions and 19 deletions

View File

@ -9,10 +9,19 @@ const httpLink = createHttpLink({
// Auth Link для добавления JWT токена в заголовки
const authLink = setContext((operation, { headers }) => {
// Получаем токен из localStorage каждый раз
const token = typeof window !== 'undefined' ? localStorage.getItem('authToken') : null
if (typeof window === 'undefined') {
return { headers }
}
console.log(`Apollo Client - Operation: ${operation.operationName}, Token:`, token ? `${token.substring(0, 20)}...` : 'No token')
// Проверяем токены администратора и пользователя
const adminToken = localStorage.getItem('adminAuthToken')
const userToken = localStorage.getItem('authToken')
// Приоритет у админского токена
const token = adminToken || userToken
const tokenType = adminToken ? 'admin' : 'user'
console.log(`Apollo Client - Operation: ${operation.operationName}, Token type: ${tokenType}, Token:`, token ? `${token.substring(0, 20)}...` : 'No token')
const authHeaders = {
...headers,
@ -35,14 +44,24 @@ const errorLink = onError(({ graphQLErrors, networkError }) => {
)
// Если токен недействителен, очищаем localStorage и перенаправляем на авторизацию
// Но не делаем редирект если пользователь уже на главной странице (в процессе авторизации)
if (extensions?.code === 'UNAUTHENTICATED') {
if (typeof window !== 'undefined') {
localStorage.removeItem('authToken')
localStorage.removeItem('userData')
// Перенаправляем на страницу авторизации только если не находимся на ней
if (window.location.pathname !== '/') {
window.location.href = '/'
const isAdminPath = window.location.pathname.startsWith('/admin')
if (isAdminPath) {
// Для админских страниц очищаем админские токены
localStorage.removeItem('adminAuthToken')
localStorage.removeItem('adminData')
if (window.location.pathname !== '/admin') {
window.location.href = '/admin'
}
} else {
// Для пользовательских страниц очищаем пользовательские токены
localStorage.removeItem('authToken')
localStorage.removeItem('userData')
if (window.location.pathname !== '/') {
window.location.href = '/'
}
}
}
}