68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
|
|
/**
|
|||
|
|
* Auth Service
|
|||
|
|
*
|
|||
|
|
* Сервис авторизации пользователей.
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
import api from './api-client.js'
|
|||
|
|
import settingsService from './settings.service.js'
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Проверить авторизацию при загрузке страницы
|
|||
|
|
* @returns {Promise<boolean>} True если авторизован
|
|||
|
|
*/
|
|||
|
|
export async function checkAuth() {
|
|||
|
|
if (!api.isAuthenticated()) {
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Попробовать загрузить настройки (валидация токена)
|
|||
|
|
try {
|
|||
|
|
await settingsService.loadFromServer()
|
|||
|
|
return true
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Token validation failed:', error)
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Авторизация пользователя
|
|||
|
|
* @param {string} login - 8-значный логин
|
|||
|
|
* @returns {Promise<object>} User info
|
|||
|
|
*/
|
|||
|
|
export async function login(login) {
|
|||
|
|
// Валидация формата логина
|
|||
|
|
if (!/^[0-9]{8}$/.test(login)) {
|
|||
|
|
throw new Error('Логин должен состоять из 8 цифр')
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
const response = await api.login(login)
|
|||
|
|
console.log('Login successful:', response.user)
|
|||
|
|
|
|||
|
|
// Загрузить настройки с сервера
|
|||
|
|
await settingsService.loadFromServer()
|
|||
|
|
|
|||
|
|
return response.user
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Login failed:', error)
|
|||
|
|
throw error
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Выход из системы
|
|||
|
|
*/
|
|||
|
|
export function logout() {
|
|||
|
|
api.logout()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Проверить авторизован ли пользователь
|
|||
|
|
* @returns {boolean}
|
|||
|
|
*/
|
|||
|
|
export function isAuthenticated() {
|
|||
|
|
return api.isAuthenticated()
|
|||
|
|
}
|