# @analyticshub/alfa-auth-client

> [@analyticshub/alfa-auth-client][server]

Latest version **0.0.3** (published 2021-05-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install @analyticshub/alfa-auth-client
pnpm add @analyticshub/alfa-auth-client
yarn add @analyticshub/alfa-auth-client
bun add @analyticshub/alfa-auth-client
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2021-05-18 |
| First published | 2021-04-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 24.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | aahub |
| Keywords | auth, alfa-auth |

## Links

- npm: https://www.npmjs.com/package/@analyticshub/alfa-auth-client
- Repository: https://github.com/analyticshub-ru/alfa-auth-client
- Homepage: https://github.com/analyticshub-ru/alfa-auth-client#readme
- Issues: https://github.com/analyticshub-ru/alfa-auth-client/issues
- npm.io page: https://npm.io/package/@analyticshub/alfa-auth-client

## Dependencies (2)

- [jwt-decode](https://npm.io/package/jwt-decode.md) ^3.1.2
- [@babel/runtime-corejs3](https://npm.io/package/@babel/runtime-corejs3.md) ^7.13.17

## Alternatives

- [@clerk/clerk-expo](https://npm.io/package/@clerk/clerk-expo.md) — 133.6K weekly downloads
- [@pothos/plugin-authz](https://npm.io/package/@pothos/plugin-authz.md) — 12.4K weekly downloads
- [@bounded-sh/client](https://npm.io/package/@bounded-sh/client.md) — 3.2K weekly downloads
- [@oxyhq/services](https://npm.io/package/@oxyhq/services.md) — 2.3K weekly downloads
- [@luigi-project/plugin-auth-oauth2](https://npm.io/package/@luigi-project/plugin-auth-oauth2.md) — 2.3K weekly downloads

## Recent versions

- 0.0.3 (latest) — 2021-05-18
- 0.0.1 — 2021-04-27

## README

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

---
_Source: https://npm.io/package/@analyticshub/alfa-auth-client · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
