Библиотека сервера авторизации
@analyticshub/alfa-auth-client
Пример использования
Настройка
1. Подключите пакеты
// use npm
npm install @analyticshub/alfa-auth-client
// use yarn
yarn add @analyticshub/alfa-auth-client
2. Добавьте ссылки на зависимости в ваш код
import { AuthService, LocalStorageTokenStorage } from "@analyticshub/alfa-auth-client";
3. Подготовьте конфигурацию
// тип для пользователя
interface IUserData {
id_user: string;
login: string;
groups: string[];
}
// базовый адрес сервера
const authServerBaseUrl = "https://example-server.com";
// частота автоматического обновления токена (в секундах)
const refreshInterval = 300;
4. Подготовьте хранилище для токена
const tokenStorage = new LocalStorageTokenStorage("authorization_token")
5. Запустите сервис
const authService = new AuthService<IUserData>({
baseUrl: authServerBaseUrl,
refreshTokenIntervalSeconds: refreshInterval,
storage: tokenStorage,
})
6. Получите токен
Токен приходит как url-параметр.
Его нужно самостоятельно "забрать" из адресной строки в момент загрузки страницы.
const urlParams = new URLSearchParams(location.search);
const token = urlParams.get("token");
if (token) {
// установить токен
authService.setToken(token);
// удалить токен из адресной строки
urlParams.delete("token");
history.replace(`${location.pathname}?${urlParams}`);
}
Получение данных токена и пользователя
if (authService.isAuthorized) {
const token: string = authService.getToken();
const user: IUserData = authService.userPayload;
}
Протухание токена
Библиотека автоматически обновляет токен авторизации с указанным в конфигурации интервалом.
Токен может меняться, всегда используйте
authService.getToken()
в методах API.
Библиотека бросит исключение при попытке доступа к токену (или пользователю), если токен отсутствует.
Поймав исключение, следует отправить браузер на страницу входа путём вызова
error.redirectToAuth()
import { AuthServiceError } from "@analyticshub/alfa-auth-client"
try {
const user = authService.userPayload;
} catch (error) {
if (error instanceof AuthServiceError) {
await app.stashUsavedJobBeforeRedirect();
error.redirectToAuth();
}
}
Вызов
authService.isAuthorized
не бросает исключения: его можно использовать для проверки.
Редирект также можно вызвать в любой момент:
authService.redirectToAuth();
После авторизации сервер вернёт пользователя на ту же страницу, с которой совершён редирект.