/
kreyndelHam
/
Konstructorium
Обзор
Документация
Войти
/
kreyndelHam
/
Konstructorium
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
dev
frontend/src/store/authStore.js
76 строк
2 KB
MihahamYT
Fixed errors
17 май 2026, 19:21
17 май 2026, 19:21
e1d82b6
Код
Авторство
О чём код?
import { create } from 'zustand' /** * Restore persisted auth snapshot (user + API token) from localStorage. * * @returns {{user: object|null, token: string|null}} */ const loadStoredAuth = () => { try { const stored = localStorage.getItem('auth-storage') if (stored) { const parsed = JSON.parse(stored) return { user: parsed.user || null, token: parsed.token || null, } } } catch (error) { console.error('Error loading auth from storage:', error) } return { user: null, token: null } } const initialAuth = loadStoredAuth() /** * Read DRF token from localStorage without importing the store (for axios interceptors). * * @returns {string|null} */ export const getStoredAuthToken = () => { try { const stored = localStorage.getItem('auth-storage') if (stored) { return JSON.parse(stored).token || null } } catch (error) { console.error('Error reading auth token from storage:', error) } return null } /** Zustand store for user authentication state. */ export const useAuthStore = create((set, get) => ({ user: initialAuth.user, token: initialAuth.token, isAuthenticated: !!initialAuth.user, initialized: false, /** * Persist user profile and optional API token issued by auth_service on login. * * @param {object|null} user * @param {string|null|undefined} token When omitted, keeps the existing token. */ setUser: (user, token = undefined) => { const userData = user ? { id: user.id, username: user.username, email: user.email } : null const tokenValue = token === undefined ? get().token : token if (userData) { localStorage.setItem( 'auth-storage', JSON.stringify({ user: userData, token: tokenValue || null }), ) } else { localStorage.removeItem('auth-storage') } set({ user: userData, token: tokenValue || null, isAuthenticated: !!user }) }, setInitialized: (value) => set({ initialized: value }), logout: () => { localStorage.removeItem('auth-storage') set({ user: null, token: null, isAuthenticated: false }) }, }))