コンテンツへスキップ
NextAuth.js v4からの移行?こちらを ご確認ください。.

アダプター

Auth.jsは、任意のデータレイヤー(データベース、ORM、バックエンドAPI、HTTPクライアント)と統合して、ユーザーの自動作成、アカウントリンクの自動処理、パスワードレスログインのサポート、セッション情報の保存を自動化できます。

このモジュールには、Auth.js互換のアダプターを作成するためのユーティリティ関数と型が含まれています。

Auth.jsは、ユーザーのログイン状態を保持するために2つのセッション戦略をサポートしています。デフォルトでは、CookieとJWTベースのセッションストアを使用しますが(strategy: "jwt")、データベースアダプターを使用してセッションをデータベースに保存することもできます。

先に進む前に、Auth.jsには公式データベースアダプターの一覧があります。お使いのデータベースがそこに記載されている場合は、独自のアダプターを作成する必要はない可能性があります。公式アダプターと統合できないデータソリューションを使用している場合、このモジュールは互換性のあるアダプターの作成に役立ちます。

⚠️

注記 @auth/coreはフレームワーク/ランタイムに依存しませんが、アダプターは、フレームワーク/ランタイムとまだ互換性のないクライアント/ORMパッケージに依存する場合があります(たとえば、Node.js APIに依存する場合があります)。関連する問題は、対応するパッケージのメンテナーに報告する必要があります。

インストール

npm install @auth/core

その後、@auth/core/adaptersからこのサブモジュールをインポートできます。

使用方法

各アダプターメソッドとその関数シグネチャは、アダプターインターフェースに記載されています。

import { type Adapter } from "@auth/core/adapters"
 
// 1. Simplest form, a plain object.
export const MyAdapter: Adapter {
 // implement the adapter methods here
}
 
// or
 
// 2. A function that returns an object. Official adapters use this pattern.
export function MyAdapter(config: any): Adapter {
 // Instantiate a client/ORM here with the provided config, or pass it in as a parameter.
 // Usually, you might already have a client instance elsewhere in your application,
 // so you should only create a new instance if you need to or you don't have one.
 
 return {
   // implement the adapter methods
 }
}
 

その後、adapterオプションとしてアダプターをAuth.jsに渡すことができます。

import { MyAdapter } from "./my-adapter"
 
const response = await Auth(..., {
  adapter: MyAdapter, // 1.
  // or
  adapter: MyAdapter({ /* config */ }), // 2.
  ...
})

ゼロから作成するのではなく、既存のアダプターを調整してデータレイヤーで動作させることができる場合があります。

import { type Adapter } from "@auth/core/adapters"
import { PrismaAdapter } from "@auth/prisma-adapter"
import { PrismaClient } from "@prisma/client"
 
const prisma = new PrismaClient()
 
const adapter: Adapter = {
  ...PrismaAdapter(prisma),
  // Add your custom methods here
}
 
const request = new Request("https://example.com")
const response = await Auth(request, { adapter, ... })

モデル

Auth.jsは任意のデータベースで使用できます。モデルは、Auth.jsがデータベースから期待する構造を示しています。モデルは使用するアダプターによってわずかに異なりますが、一般的には以下のグラフと同様の構造になります。各モデルは、追加のフィールドで拡張できます。

Auth.js / NextAuth.jsはデータベース行にcamelCaseを使用しますが、OAuth関連の値には従来のsnake_case形式を尊重します。混合ケースが問題になる場合は、ほとんどのアダプターに、ケース表記規則を強制する方法に関する専用のドキュメントセクションがあります。

テスト

アダプターがAuth.jsと互換性があることを確認するためのテストスイートが利用可能です。

既知の問題

以下は、Auth.jsには組み込まれていない機能ですが、ユーザー側で解決できるものです。これらの機能の実装にご協力いただける場合は、ご連絡ください。

トークンのローテーション

Auth.jsは現在access_tokenのローテーションをすぐにサポートしていません。refresh_token、有効期限など必要な情報はデータベースに保存されていますが、トークンをローテーションするロジックはコアライブラリには実装されていません。このガイドは、ユーザー側でこれを行うための必要な手順を提供するはずです。

フェデレーテッドログアウト

Auth.jsは現在、すぐにフェデレーテッドログアウトをサポートしていません。これは、アクティブなセッションがデータベースから削除されても、ユーザーはアイデンティティプロバイダーに引き続きログインしたままになり、アプリケーションからログアウトされるだけであることを意味します。たとえば、Googleをアイデンティティプロバイダーとして使用し、データベースからセッションを削除した場合、ユーザーはGoogleに引き続きログインしたままですが、アプリケーションからはログアウトされます。

ユーザーが共有のコンピューター(例:図書館)からアプリケーションを使用している可能性がある場合は、フェデレーテッドログアウトを実装することを検討する必要があります。

アダプター

アダプターは、データソースからデータを読み書きする関数プロパティ(メソッド)を持つオブジェクトです。これらのメソッドは、データレイヤーをAuth.jsが理解できる共通インターフェースに正規化する方法と考えてください。

これがAuth.jsを非常に柔軟にし、任意のデータレイヤーで使用できる理由です。

アダプターメソッドは、次の操作を実行するために使用されます。

  • ユーザーの作成/更新/削除
  • ユーザーへの/からのアカウントのリンク/リンク解除
  • アクティブなセッションの処理
  • 複数のデバイス間でのパスワードレス認証のサポート

メソッドが実装されていないがAuth.jsによって呼び出された場合、ユーザーにエラーが表示され、操作は失敗します。

メソッド

createAuthenticator()?

optional createAuthenticator(authenticator): Awaitable<AdapterAuthenticator>

新しい認証子を作成します。

作成に失敗した場合、アダプタはエラーをスローする必要があります。

パラメータ
パラメータ
authenticatorAdapterAuthenticator
戻り値

Awaitable<AdapterAuthenticator>

createSession()?

optional createSession(session): Awaitable<AdapterSession>

ユーザーのセッションを作成して返します。

参照: データベースセッション管理

パラメータ
パラメータ
sessionオブジェクト
session.expires日付
session.sessionToken文字列
session.userId文字列
戻り値

Awaitable<AdapterSession>

createUser()?

optional createUser(user): Awaitable<AdapterUser>

データベースにユーザーを作成して返します。

参照: ユーザー管理

パラメータ
パラメータ
userAdapterUser
戻り値

Awaitable<AdapterUser>

createVerificationToken()?

optional createVerificationToken(verificationToken): Awaitable<undefined | null | VerificationToken>

検証トークンを作成して返します。

参照: 検証トークン

パラメータ
パラメータ
verificationTokenVerificationToken
戻り値

Awaitable<undefined | null | VerificationToken>

deleteSession()?

optional deleteSession(sessionToken): Promise<void> | Awaitable<undefined | null | AdapterSession>

データベースからセッションを削除します。ログ出力のため、このメソッドは削除されるセッションを返すことも推奨されます。

参照: データベースセッション管理

パラメータ
パラメータ
sessionToken文字列
戻り値

Promise<void> | Awaitable<undefined | null | AdapterSession>

deleteUser()?

optional deleteUser(userId): Promise<void> | Awaitable<undefined | null | AdapterUser>
パラメータ
パラメータ
userId文字列
戻り値

Promise<void> | Awaitable<undefined | null | AdapterUser>

TODO

このメソッドはまだ呼び出されていません。

参照: ユーザー管理

getAccount()?

optional getAccount(providerAccountId, provider): Awaitable<null | AdapterAccount>

プロバイダアカウントIDとプロバイダからアカウントを取得します。

アカウントが見つからない場合、アダプタはnullを返す必要があります。

パラメータ
パラメータ
providerAccountId文字列
プロバイダー文字列
戻り値

Awaitable<null | AdapterAccount>

getAuthenticator()?

optional getAuthenticator(credentialID): Awaitable<null | AdapterAuthenticator>

credentialIDから認証子を取得します。

認証子が見つからない場合、アダプタはnullを返す必要があります。

パラメータ
パラメータ
credentialID文字列
戻り値

Awaitable<null | AdapterAuthenticator>

getSessionAndUser()?

optional getSessionAndUser(sessionToken): Awaitable<null | {
  session: AdapterSession;
  user: AdapterUser;
}>

データベースからセッションとユーザーを一度に取得します。

💡

データベースが結合をサポートしている場合は、データベースクエリの数を減らすことをお勧めします。

参照: データベースセッション管理

パラメータ
パラメータ
sessionToken文字列
戻り値

Awaitable<null | { session: AdapterSession; user: AdapterUser; }>

getUser()?

optional getUser(id): Awaitable<null | AdapterUser>

ユーザーIDを介してデータベースからユーザーを取得します。

参照: ユーザー管理

パラメータ
パラメータ
id文字列
戻り値

Awaitable<null | AdapterUser>

getUserByAccount()?

optional getUserByAccount(providerAccountId): Awaitable<null | AdapterUser>

プロバイダIDと特定のアカウントのユーザーIDを使用して、ユーザーを取得します。

参照: ユーザー管理

パラメータ
パラメータ
providerAccountIdPick<AdapterAccount, "provider" | "providerAccountId">
戻り値

Awaitable<null | AdapterUser>

getUserByEmail()?

optional getUserByEmail(email): Awaitable<null | AdapterUser>

ユーザーのメールアドレスを介してデータベースからユーザーを取得します。

参照: 検証トークン

パラメータ
パラメータ
メール文字列
戻り値

Awaitable<null | AdapterUser>

linkAccount()?

optional linkAccount(account): Promise<void> | Awaitable<undefined | null | AdapterAccount>

このメソッドは内部的に呼び出されます(ただし、手動リンクにも使用できます)。データベースにAccountを作成します。

参照: ユーザー管理

パラメータ
パラメータ
accountAdapterAccount
戻り値

Promise<void> | Awaitable<undefined | null | AdapterAccount>

listAuthenticatorsByUserId()?

optional listAuthenticatorsByUserId(userId): Awaitable<AdapterAuthenticator[]>

ユーザーのすべての認証子を返します。

ユーザーが見つからない場合でも、アダプタは空の配列を返す必要があります。その他の理由で取得に失敗した場合、アダプタはエラーをスローする必要があります。

パラメータ
パラメータ
userId文字列
戻り値

Awaitable<AdapterAuthenticator[]>

unlinkAccount()?

optional unlinkAccount(providerAccountId): Promise<void> | Awaitable<undefined | AdapterAccount>
パラメータ
パラメータ
providerAccountIdPick<AdapterAccount, "provider" | "providerAccountId">
戻り値

Promise<void> | Awaitable<undefined | AdapterAccount>

TODO

このメソッドはまだ呼び出されていません。

updateAuthenticatorCounter()?

optional updateAuthenticatorCounter(credentialID, newCounter): Awaitable<AdapterAuthenticator>

認証子のカウンターを更新します。

更新に失敗した場合、アダプタはエラーをスローする必要があります。

パラメータ
パラメータ
credentialID文字列
newCounter数値
戻り値

Awaitable<AdapterAuthenticator>

updateSession()?

optional updateSession(session): Awaitable<undefined | null | AdapterSession>

データベース内のセッションを更新して返します。

参照: データベースセッション管理

パラメータ
パラメータ
sessionPartial<AdapterSession> & Pick<AdapterSession, "sessionToken">
戻り値

Awaitable<undefined | null | AdapterSession>

updateUser()?

optional updateUser(user): Awaitable<AdapterUser>

データベース内のユーザー情報を更新し、更新後のユーザー情報を返します。

参照: ユーザー管理

パラメーター
パラメータ
userPartial<AdapterUser> & Pick<AdapterUser, "id">
戻り値

Awaitable<AdapterUser>

useVerificationToken()?

optional useVerificationToken(params): Awaitable<null | VerificationToken>

データベースから検証トークンを取得し、削除します。そのため、トークンは一度しか使用できません。

参照: 検証トークン

パラメーター
パラメータ
paramsオブジェクト
params.identifier文字列
params.token文字列
戻り値

Awaitable<null | VerificationToken>


AdapterAccount

アカウントは、ユーザーとプロバイダー間の接続を表します。

アカウントには2つの種類があります。

  • OAuth/OIDCアカウント:ユーザーがOAuthプロバイダーを使用してサインインしたときに作成されます。
  • メールアカウント:ユーザーがメールプロバイダーを使用してサインインしたときに作成されます。

1人のユーザーは複数のアカウントを持つことができます。

継承元

プロパティ

access_token?

optional readonly access_token: string;
継承元

Account.access_token

authorization_details?

optional readonly authorization_details: AuthorizationDetails[];
継承元

Account.authorization_details

expires_at?

optional expires_at: number;

TokenEndpointResponse.expires_inに基づいて計算された値です。

TokenEndpointResponse.access_tokenが期限切れになる絶対的なタイムスタンプ(秒単位)です。

この値は、TokenEndpointResponse.refresh_tokenと共にトークンのローテーションを実装するために使用できます。

参照
継承元

Account.expires_at

expires_in?

optional readonly expires_in: number;
継承元

Account.expires_in

id_token?

optional readonly id_token: string;
継承元

Account.id_token

provider

provider: string;

このアカウントのプロバイダーIDです。例:「google」。完全なリストはhttps://authjs.dokyumento.jp/reference/core/providersを参照してください。

継承元

Account.provider

providerAccountId

providerAccountId: string;

この値は、アカウントの作成に使用されているプロバイダーの種類によって異なります。

  • oauth/oidc: profile()コールバックから返されるOAuthアカウントのIDです。
  • email: ユーザーのメールアドレスです。
  • credentials: authorize()コールバックから返されるidです。
継承元

Account.providerAccountId

refresh_token?

optional readonly refresh_token: string;
継承元

Account.refresh_token

scope?

optional readonly scope: string;
継承元

Account.scope

token_type?

optional readonly token_type: Lowercase<string>;

注記:値は大文字と小文字を区別しないため、常に小文字で返されます。

継承元

Account.token_type

type

type: AdapterAccountType;

このアカウントのプロバイダーの種類です。

オーバーライド

Account.type

userId

userId: string;

このアカウントが属するユーザーのIDです。

参照

https://authjs.dokyumento.jp/reference/core/adapters#adapteruser

オーバーライド

Account.userId


AdapterAuthenticator

オーセンティケーターは、ユーザーに割り当てられた資格情報オーセンティケーターを表します。

継承元

プロパティ

counter

counter: number;

オーセンティケーターが使用された回数です。

継承元

Authenticator.counter

credentialBackedUp

credentialBackedUp: boolean;

クライアントオーセンティケーターが資格情報をバックアップしたかどうかを示します。

継承元

Authenticator.credentialBackedUp

credentialDeviceType

credentialDeviceType: string;

オーセンティケーターのデバイスの種類です。

継承元

Authenticator.credentialDeviceType

credentialID

credentialID: string;

Base64でエンコードされた資格情報IDです。

継承元

Authenticator.credentialID

credentialPublicKey

credentialPublicKey: string;

Base64でエンコードされた資格情報の公開鍵です。

継承元

Authenticator.credentialPublicKey

providerAccountId

providerAccountId: string;

認証子に接続されているプロバイダーアカウントID。

継承元

Authenticator.providerAccountId

transports?

optional transports: null | string;

連結されたトランスポートフラグ。

継承元

Authenticator.transports

userId

userId: string;

認証子のユーザーID。

オーバーライド

Authenticator.userId


AdapterSession

セッションは、ユーザーの現在のサインイン状態に関する情報を保持します。

プロパティ

expires

expires: Date;

セッションが期限切れになる絶対日付。

SessionOptions.maxAgeで定義されているmaxAgeオプションに基づいて、セッションが期限切れになる前にアクセスされた場合、延長されます。 SessionOptions.updateAgeで定義された期間内では、一度しか延長されません。

セッションが期限切れになった後にアクセスされた場合、非アクティブなセッションをクリーンアップするためにデータベースから削除されます。

sessionToken

sessionToken: string;

"database" AuthConfig.strategyオプションを使用する場合、データベース内のセッションを検索するために使用される、ランダムに生成された値です。この値は、クライアント側の安全なHTTP専用Cookieに保存されます。

userId

userId: string;

アクティブなセッションをデータベース内のユーザーに接続します。


AdapterUser

ユーザーは、アプリケーションにサインインできる人を表します。ユーザーがまだ存在しない場合、初めてサインインしたときに、IDプロバイダーから返された情報(プロフィールデータ)を使用して作成されます。対応するアカウントも作成され、ユーザーにリンクされます。

拡張

プロパティ

email

email: string;

ユーザーのメールアドレス。

オーバーライド

User.email

emailVerified

emailVerified: null | Date;

ユーザーがメールプロバイダーを介してメールアドレスを検証したかどうか。ユーザーがまだメールプロバイダーでサインインしていない場合、または最初のサインインに成功した日付の場合はnullです。

id

id: string;

ユーザーの一意の識別子。

オーバーライド

User.id

image?

optional image: null | string;
継承元

User.image

name?

optional name: null | string;
継承元

User.name


VerificationToken

検証トークンは、ユーザーのメールアドレスを介してユーザーをサインインするために使用される一時的なトークンです。ユーザーがメールプロバイダーでサインインするときに作成されます。ユーザーがメール内のリンクをクリックすると、トークンとメールがサーバーに送信され、ハッシュ化されてデータベース内の値と比較されます。トークンとメールが一致し、トークンがまだ期限切れになっていない場合、ユーザーはサインインされます。その後、トークンはデータベースから削除されます。

プロパティ

expires

expires: Date;

トークンが期限切れになる絶対日付。

identifier

identifier: string;

ユーザーのメールアドレス。

token

token: string;

AuthConfig.secret値を使用してハッシュ化されたトークン。


AdapterAccountType

type AdapterAccountType: Extract<ProviderType, "oauth" | "oidc" | "email" | "webauthn">;

アカウントの種類。


isDate()

isDate(value): value is string

指定された値をDateに解析できるかどうかを判別します。

パラメーター

パラメータ
valueunknown

戻り値

value が文字列の場合

Auth.js © Balázs Orbán and Team -2024