Эта документация была автоматически переведена ИИ.
NocoBase позволяет расширять типы аутентификации пользователей по мере необходимости. Обычно существует два основных типа аутентификации пользователей: первый — это определение личности пользователя непосредственно в приложении NocoBase (например, вход по паролю, вход по SMS и т.д.); второй — это когда сторонние сервисы определяют личность пользователя и уведомляют приложение NocoBase о результате через обратный вызов (например, методы аутентификации OIDC, SAML и т.д.). Процесс аутентификации для этих двух различных типов в NocoBase выглядит следующим образом:
api.auth.signIn(), отправляя запрос на интерфейс auth:signIn. При этом идентификатор текущего аутентификатора передается на бэкенд через заголовок запроса X-Authenticator.auth:signIn перенаправляет запрос соответствующему типу аутентификации на основе идентификатора аутентификатора в заголовке запроса. Метод validate в классе аутентификации, зарегистрированном для этого типа, выполняет соответствующую логическую обработку.auth:signIn, сохраняет токен в Local Storage и завершает вход. Этот шаг автоматически обрабатывается внутри SDK.
auth:getAuthUrl), и передает информацию, такую как имя приложения и идентификатор аутентификатора, в соответствии с протоколом.auth:redirect), возвращает результат аутентификации, а также информацию, такую как имя приложения и идентификатор аутентификатора.AuthManager получает соответствующий класс аутентификации и активно вызывает метод auth.signIn(). Метод auth.signIn() в свою очередь вызывает метод validate() для обработки логики авторизации.token и идентификатор аутентификатора в параметрах URL, например, ?authenticator=xxx&token=yyy.
Далее мы рассмотрим, как зарегистрировать серверные интерфейсы и клиентские пользовательские интерфейсы.
Ядро NocoBase предоставляет возможности для регистрации и управления расширенными типами аутентификации. Основная логика обработки для расширения плагина входа требует наследования от абстрактного класса Auth ядра и реализации соответствующих стандартных интерфейсов.
Полную информацию об API см. в Auth.
Ядро также регистрирует базовые операции с ресурсами, связанные с аутентификацией пользователей.
| API | Описание |
|---|---|
auth:check | Проверить, вошел ли пользователь в систему |
auth:signIn | Войти в систему |
auth:signUp | Зарегистрироваться |
auth:signOut | Выйти из системы |
В большинстве случаев расширенный тип аутентификации пользователей может также использовать существующую логику аутентификации JWT для генерации учетных данных для доступа пользователя к API. Класс BaseAuth в ядре предоставляет базовую реализацию абстрактного класса Auth. См. BaseAuth. Плагины могут напрямую наследовать класс BaseAuth для повторного использования части логического кода и снижения затрат на разработку.
При реализации логики аутентификации пользователей обычно требуется обработка пользовательских данных. В приложении NocoBase соответствующие коллекции по умолчанию определены следующим образом:
| Коллекции | Описание | Плагин |
|---|---|---|
users | Хранит информацию о пользователях, такую как электронная почта, никнейм и пароль | Пользовательский плагин (@nocobase/plugin-users) |
authenticators | Хранит информацию об аутентификаторах (сущностях типов аутентификации), соответствующую типу аутентификации и конфигурации | Плагин аутентификации пользователей (@nocobase/plugin-auth) |
usersAuthenticators | Связывает пользователей и аутентификаторы, сохраняет информацию о пользователе для соответствующего аутентификатора | Плагин аутентификации пользователей (@nocobase/plugin-auth) |
Как правило, для расширенных методов входа достаточно использовать users и usersAuthenticators для хранения соответствующих пользовательских данных. Только в особых случаях требуется самостоятельно добавлять новую коллекцию.
Основные поля коллекции usersAuthenticators:
| Поле | Описание |
|---|---|
uuid | Уникальный идентификатор пользователя для данного типа аутентификации, например, номер телефона или OpenID WeChat |
meta | Поле JSON для хранения дополнительной информации |
userId | Идентификатор пользователя |
authenticator | Имя аутентификатора (уникальный идентификатор) |
Для операций запроса и создания пользователей модель данных AuthModel коллекции authenticators также инкапсулирует несколько методов, которые можно использовать в классе CustomAuth через this.authenticator[имяМетода]. Полную информацию об API см. в AuthModel.
Расширенный метод аутентификации необходимо зарегистрировать в модуле управления аутентификацией.
Пользовательский интерфейс клиентской части регистрируется через интерфейс registerType, предоставляемый клиентской частью плагина аутентификации пользователей:

Если несколько аутентификаторов, соответствующих типам аутентификации, зарегистрировали формы входа, они будут отображаться в виде вкладок. Заголовок вкладки будет соответствовать названию аутентификатора, настроенного в бэкенде.


Обычно это кнопка входа через сторонний сервис, но фактически это может быть любой компонент.

Если вам нужно перейти со страницы входа на страницу регистрации, это необходимо обработать самостоятельно в компоненте входа.

В верхней части находится общая конфигурация аутентификатора, а в нижней — часть формы для регистрации пользовательских настроек.
Для отправки запросов к интерфейсам, связанным с аутентификацией пользователей, на клиентской стороне вы можете использовать SDK, предоставляемый NocoBase.
Подробную информацию об API см. в @nocobase/sdk - Auth.