# BaseAuth

## Обзор

`BaseAuth` наследует от абстрактного класса [Auth](./auth) и представляет собой базовую реализацию для типов аутентификации пользователей, использующую JWT в качестве метода аутентификации. В большинстве случаев при расширении типов аутентификации пользователей вы можете наследовать от `BaseAuth`, и нет необходимости напрямую наследовать от абстрактного класса `Auth`.

```ts
class BasicAuth extends BaseAuth {
  constructor(config: AuthConfig) {
    // Устанавливаем коллекцию пользователей
    const userCollection = config.ctx.db.getCollection('users');
    super({ ...config, userCollection });
  }

  // Логика аутентификации пользователя, вызывается методом `auth.signIn`
  // Возвращает данные пользователя
  async validate() {
    const ctx = this.ctx;
    const { values } = ctx.action.params;
    // ...
    return user;
  }
}
```

## Методы класса

### `constructor()`

Конструктор, создает экземпляр `BaseAuth`.

#### Сигнатура

- `constructor(config: AuthConfig & { userCollection: Collection })`

#### Подробности

| Параметр         | Тип          | Описание                                                                                                |
| :--------------- | :----------- | :------------------------------------------------------------------------------------------------------ |
| `config`         | `AuthConfig` | См. [Auth - AuthConfig](./auth#authconfig)                                                              |
| `userCollection` | `Collection` | Коллекция пользователей, например: `db.getCollection('users')`. См. [DataBase - Collection](../database/collection) |

### `user()`

Аксессор, который устанавливает и получает информацию о пользователе. По умолчанию использует объект `ctx.state.currentUser` для доступа.

#### Сигнатура

- `set user()`
- `get user()`

### `check()`

Выполняет аутентификацию по токену запроса и возвращает информацию о пользователе.

### `signIn()`

Вход пользователя, генерирует токен.

### `signUp()`

Регистрация пользователя.

### `signOut()`

Выход пользователя, аннулирует токен.

### `validate()` \*

Основная логика аутентификации, вызывается методом `signIn` для определения возможности успешного входа пользователя в систему.