/
Codename-Nik
/
WebApp
Обзор
Документация
Войти
/
Codename-Nik
/
WebApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
frontend/src/stores/auth.ts
80 строк
2 KB
Nikolay Pokhodnya
first commit
03 ноя 2025, 19:47
03 ноя 2025, 19:47
a9fbdee
Код
Авторство
О чём код?
import { defineStore } from 'pinia' import { ref } from 'vue' import axios from 'axios' import type { LoginData, RegisterData, User } from '@/types/auth' const api = axios.create({ baseURL: 'http://localhost:8000/api', }) export const useAuthStore = defineStore('auth', () => { const token = ref<string | null>(localStorage.getItem('token')) const user = ref<User | null>(null) const isLoading = ref(false) const error = ref<string | null>(null) if (token.value) { api.defaults.headers.common['Authorization'] = `Bearer ${token.value}` } const login = async (credentials: LoginData) => { isLoading.value = true error.value = null try { const response = await api.post('/auth/login/', credentials) token.value = response.data.access localStorage.setItem('token', token.value as string) api.defaults.headers.common['Authorization'] = `Bearer ${token.value}` await getCurrentUser() return response.data } catch (err: any) { error.value = err.response?.data?.detail || 'Login failed' throw err } finally { isLoading.value = false } } const register = async (userData: RegisterData) => { isLoading.value = true error.value = null try { const response = await api.post('/auth/register/', userData) return response.data } catch (err: any) { error.value = err.response?.data || 'Registration failed' throw err } finally { isLoading.value = false } } const getCurrentUser = async () => { try { const response = await api.get('/users/me/') user.value = response.data return response.data } catch (err: any) { logout() throw err } } const logout = () => { token.value = null user.value = null localStorage.removeItem('token') delete api.defaults.headers.common['Authorization'] } return { token, user, isLoading, error, login, register, getCurrentUser, logout } })