import api from './api'; import { User } from './users'; // Типы данных export interface LoginCredentials { username: string; password: string; } export interface RegisterData { email: string; password: string; password_confirm: string; first_name?: string; last_name?: string; phone?: string; } export interface AuthResponse { access_token: string; token_type: string; user: User; } // Сервис для аутентификации const authService = { // Вход в систему login: async (credentials: LoginCredentials): Promise => { // Создаем FormData для отправки данных в формате x-www-form-urlencoded const formData = new URLSearchParams(); formData.append('username', credentials.username); formData.append('password', credentials.password); const response = await api.post('/auth/login', formData.toString(), { headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }); // Сохраняем токен в localStorage if (response.data.access_token) { localStorage.setItem('token', response.data.access_token); } return response.data; }, // Регистрация нового пользователя register: async (data: RegisterData): Promise => { const response = await api.post('/auth/register', data); // Сохраняем токен в localStorage if (response.data.access_token) { localStorage.setItem('token', response.data.access_token); } return response.data; }, // Выход из системы logout: (): void => { localStorage.removeItem('token'); }, // Проверка, авторизован ли пользователь isAuthenticated: (): boolean => { return !!localStorage.getItem('token'); }, // Получить текущий токен getToken: (): string | null => { return localStorage.getItem('token'); }, // Запрос на сброс пароля resetPassword: async (email: string): Promise => { await api.post('/auth/reset-password', { email }); }, // Установка нового пароля после сброса setNewPassword: async (token: string, password: string): Promise => { await api.post('/auth/set-new-password', { token, password }); }, // Изменение пароля авторизованным пользователем changePassword: async (currentPassword: string, newPassword: string): Promise => { await api.post('/auth/change-password', { current_password: currentPassword, new_password: newPassword }); } }; export default authService;