/
fegerV
/
Stogram
Обзор
Документация
Войти
/
fegerV
/
Stogram
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
client/src/store/authStore.ts
85 строк
3 KB
engine-labs-app[bot]
feat(app): initial full-stack implementation of Stogram PWA messenger with real-time chat, VoIP, and Docker support
31 окт 2025, 17:21
31 окт 2025, 17:21
f58efe2
Код
Авторство
О чём код?
import { create } from 'zustand'; import { User } from '../types'; import { authApi } from '../services/api'; import { socketService } from '../services/socket'; interface AuthState { user: User | null; token: string | null; isAuthenticated: boolean; isLoading: boolean; error: string | null; login: (login: string, password: string) => Promise<void>; register: (email: string, username: string, password: string, displayName?: string) => Promise<void>; logout: () => void; loadUser: () => Promise<void>; clearError: () => void; } export const useAuthStore = create<AuthState>((set) => ({ user: null, token: localStorage.getItem('token'), isAuthenticated: false, isLoading: false, error: null, login: async (login: string, password: string) => { set({ isLoading: true, error: null }); try { const response = await authApi.login({ login, password }); const { user, token } = response.data; localStorage.setItem('token', token); set({ user, token, isAuthenticated: true, isLoading: false }); socketService.connect(token); } catch (error: any) { set({ error: error.response?.data?.error || 'Login failed', isLoading: false, }); throw error; } }, register: async (email: string, username: string, password: string, displayName?: string) => { set({ isLoading: true, error: null }); try { const response = await authApi.register({ email, username, password, displayName }); const { user, token } = response.data; localStorage.setItem('token', token); set({ user, token, isAuthenticated: true, isLoading: false }); socketService.connect(token); } catch (error: any) { set({ error: error.response?.data?.error || 'Registration failed', isLoading: false, }); throw error; } }, logout: () => { localStorage.removeItem('token'); socketService.disconnect(); set({ user: null, token: null, isAuthenticated: false }); }, loadUser: async () => { const token = localStorage.getItem('token'); if (!token) { set({ isAuthenticated: false, isLoading: false }); return; } set({ isLoading: true }); try { const response = await authApi.getMe(); set({ user: response.data, isAuthenticated: true, isLoading: false }); socketService.connect(token); } catch (error) { localStorage.removeItem('token'); set({ user: null, token: null, isAuthenticated: false, isLoading: false }); } }, clearError: () => set({ error: null }), }));