Добавлены модели и функциональность для управления администраторами, включая авторизацию через JWT, запросы и мутации для получения информации об администраторах и управления пользователями. Обновлены стили и логика работы с токенами в Apollo Client. Улучшен интерфейс взаимодействия с пользователем.
This commit is contained in:
@ -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 = '/'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user