このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください
NocoBaseでは、必要に応じてユーザー認証タイプを拡張できます。ユーザー認証には主に2つのタイプがあります。1つは、パスワードログインやSMSログインのように、NocoBaseアプリケーション内でユーザーの身元を判断するタイプです。もう1つは、OIDCやSAMLなどの認証方法のように、サードパーティサービスがユーザーの身元を判断し、その結果をコールバックを通じてNocoBaseアプリケーションに通知するタイプです。NocoBaseにおけるこれら2つの異なる認証タイプのプロセスは、基本的に以下のようになります。
api.auth.signIn() を呼び出し、ログインインターフェース auth:signIn をリクエストします。この際、現在使用している認証器の識別子をリクエストヘッダー X-Authenticator を介してバックエンドに渡します。auth:signIn インターフェースは、リクエストヘッダー内の認証器識別子に基づいて、認証器に対応する認証タイプに転送され、その認証タイプに登録されている認証クラスの validate メソッドが関連するロジック処理を実行します。auth:signIn インターフェースのレスポンスからユーザー情報と認証 token を取得し、token をLocal Storageに保存してログインを完了します。このステップはSDK内部で自動的に処理されます。
auth:getAuthUrl)を通じてサードパーティのログインURLを取得し、プロトコルに従ってアプリケーション名や認証器の識別子などの情報を渡します。auth:redirect)を呼び出し、認証結果を返します。この際、アプリケーション名や認証器の識別子などの情報も返されます。AuthManager を介して対応する認証クラスを取得し、auth.signIn() メソッドを能動的に呼び出します。auth.signIn() メソッドは validate() メソッドを呼び出して認証ロジックを処理します。token を取得した後、302リダイレクトでフロントエンドページに戻り、URLパラメータに token と認証器の識別子(例: ?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 | この認証方法におけるユーザーの一意の識別子(例: 電話番号、WeChat OpenIDなど) |
meta | JSONフィールド、その他保存する必要がある情報 |
userId | ユーザーID |
authenticator | 認証器名(一意の識別子) |
ユーザーのクエリおよび作成操作のために、authenticators のデータモデル AuthModel にはいくつかのメソッドがカプセル化されており、CustomAuth クラス内で this.authenticator[メソッド名] を介して使用できます。完全なAPIリファレンスは AuthModel を参照してください。
拡張された認証方法は、認証管理モジュールに登録する必要があります。
クライアントサイドのユーザーインターフェースは、ユーザー認証プラグインのクライアントが提供するインターフェース registerType を介して登録されます。

複数の認証器に対応する認証タイプがログインフォームを登録している場合、それらはタブ形式で表示されます。タブのタイトルは、バックエンドで設定された認証器のタイトルになります。


通常はサードパーティのログインボタンとして使用されますが、実際には任意のコンポーネントにすることができます。

ログインページから登録ページへ遷移する必要がある場合は、ログインコンポーネント内でご自身で処理を行う必要があります。

上部には汎用的な認証器設定があり、下部には登録可能なカスタム設定フォームの部分が表示されます。
クライアントサイドでユーザー認証関連のAPIリクエストを行うには、NocoBaseが提供するSDKを使用できます。
詳細なAPIリファレンスは @nocobase/sdk - Auth を参照してください。