next-auth
v4から移行する場合は、アップグレードガイド (v5) を参照してください。
インストール
npm install next-auth@beta
環境変数の推論
NEXTAUTH_URL
と NEXTAUTH_SECRET
は v4 から推論されています。
NextAuth.js v5 以降では、AUTH_
をプレフィックスとする環境変数も自動的に推論できます。
たとえば、AUTH_GITHUB_ID
と AUTH_GITHUB_SECRET
は、GitHub プロバイダーの clientId
オプションと clientSecret
オプションとして使用されます。
環境変数名の推論は、OAuth プロバイダーの場合、次の形式になります: AUTH_{PROVIDER}_{ID|SECRET}
。
PROVIDER
は、プロバイダーの ID の大文字スネークケースバージョンで、その後に ID
または SECRET
が続きます。
AUTH_SECRET
と AUTH_URL
は、一貫性を保つために NEXTAUTH_SECRET
と NEXTAUTH_URL
のエイリアスとしても使用されます。
アプリにソーシャルログインを追加する場合、構成は次のようになります
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { handlers, auth } = NextAuth({ providers: [ GitHub ] })
そして .env.local
ファイル
AUTH_GITHUB_ID=...
AUTH_GITHUB_SECRET=...
AUTH_SECRET=...
本番環境では、AUTH_SECRET
は必須の環境変数です。設定されていない場合、NextAuth.js はエラーをスローします。詳細については、MissingSecretError を参照してください。
プロバイダーのデフォルト値を上書きする必要がある場合は、以前と同様に GitHub({...})
として関数を呼び出すことができます。
遅延初期化
また、NextAuth.js を遅延的に初期化することもできます (以前は高度な初期化として知られていました)。これにより、ルートハンドラー、ミドルウェア、API ルート、または getServerSideProps
のように、場合によっては構成でリクエストコンテキストにアクセスできます。上記の例は次のようになります
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { handlers, auth } = NextAuth(req => {
if (req) {
console.log(req) // do something with the request
}
return { providers: [ GitHub ] }
})
これは、たとえば、ステージング/開発環境で異なるプロバイダーを追加するなど、リクエストに基づいて構成をカスタマイズする場合に役立ちます。
AuthError
すべての Auth.js エラーのベースとなるエラークラスです。これは、logger.error
オプションを使用して、サーバーログに適切にフォーマットされた方法で出力されるように最適化されています。
拡張
コンストラクタ
new AuthError(message, errorOptions)
new AuthError(message?, errorOptions?): AuthError
パラメーター
パラメーター | 型 |
---|---|
message ? | string | ErrorOptions |
errorOptions ? | ErrorOptions |
戻り値
オーバーライド
Error.constructor
プロパティ
cause?
optional cause: Record<string, unknown> & {
err: Error;
};
型宣言
err?
optional err: Error;
オーバーライド
Error.cause
message
message: string;
継承元
Error.message
name
name: string;
継承元
Error.name
stack?
optional stack: string;
継承元
Error.stack
type
type: ErrorType;
エラーの種類。ログでエラーを識別するために使用します。
prepareStackTrace()?
static optional prepareStackTrace: (err, stackTraces) => any;
スタックトレースのフォーマットをオーバーライドするためのオプション
参照
https://v8.dokyumento.jp/docs/stack-trace-api#customizing-stack-traces
パラメータ
パラメーター | 型 |
---|---|
err | Error |
stackTraces | CallSite [] |
戻り値
any
継承元
Error.prepareStackTrace
stackTraceLimit
static stackTraceLimit: number;
継承元
Error.stackTraceLimit
メソッド
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void
ターゲットオブジェクトに .stack プロパティを作成します
パラメータ
パラメーター | 型 |
---|---|
targetObject | object |
constructorOpt ? | Function |
戻り値
void
継承元
Error.captureStackTrace
CredentialsSignin
Credentials プロバイダーの authorize
コールバックからスローされる可能性があります。authorize
コールバック中にエラーが発生した場合、次の 2 つのことが起こり得ます。
- ユーザーは、URL に
error=CredentialsSignin&code=credentials
を含めてサインインページにリダイレクトされます。code
は設定可能です。 - フォームアクションをサーバー側で処理するフレームワークでこのエラーをスローした場合、ユーザーをリダイレクトするのではなく、このエラーがスローされるため、処理する必要があります。
拡張
コンストラクタ
new CredentialsSignin(message, errorOptions)
new CredentialsSignin(message?, errorOptions?): CredentialsSignin
パラメータ
パラメーター | 型 |
---|---|
message ? | string | ErrorOptions |
errorOptions ? | ErrorOptions |
戻り値
継承元
プロパティ
cause?
optional cause: Record<string, unknown> & {
err: Error;
};
型宣言
err?
optional err: Error;
継承元
code
code: string;
リダイレクト URL の code
クエリパラメータに設定されるエラーコード。
⚠ 注意: このプロパティは URL に含まれるため、機密性の高いエラーを示唆しないようにしてください。
デバッグが必要な場合は、常にサーバーに完全なエラーが記録されます。
一般的に、ユーザーが間違ったユーザー名またはパスワードを特定したかどうかを具体的に示唆することはお勧めしません。「無効な資格情報」のようなものを試してください。
message
message: string;
継承元
name
name: string;
継承元
stack?
optional stack: string;
継承元
type
type: ErrorType;
エラーの種類。ログでエラーを識別するために使用します。
継承元
kind
static kind: string;
継承元
prepareStackTrace()?
static optional prepareStackTrace: (err, stackTraces) => any;
スタックトレースのフォーマットをオーバーライドするためのオプション
参照
https://v8.dokyumento.jp/docs/stack-trace-api#customizing-stack-traces
パラメータ
パラメーター | 型 |
---|---|
err | Error |
stackTraces | CallSite [] |
戻り値
any
継承元
stackTraceLimit
static stackTraceLimit: number;
継承元
type
static type: string;
メソッド
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void
ターゲットオブジェクトに .stack プロパティを作成します
パラメータ
パラメーター | 型 |
---|---|
targetObject | object |
constructorOpt ? | Function |
戻り値
void
継承元
アカウント
通常、使用されているプロバイダーに関する情報が含まれており、OAuth プロバイダーから返されるさまざまなトークンである TokenSet
も拡張します。
拡張
Partial
<TokenEndpointResponse
>
プロパティ
access_token?
optional readonly access_token: string;
継承元
Partial.access_token
authorization_details?
optional readonly authorization_details: AuthorizationDetails[];
継承元
Partial.authorization_details
expires_at?
optional expires_at: number;
TokenEndpointResponse.expires_in に基づいて計算された値。
TokenEndpointResponse.access_token が期限切れになる絶対タイムスタンプ (秒単位)。
この値は、TokenEndpointResponse.refresh_token と組み合わせてトークンローテーションを実装するために使用できます。
参照
- https://authjs.dokyumento.jp/guides/refresh-token-rotation#database-strategy
- https://www.rfc-editor.org/rfc/rfc6749#section-5.1
expires_in?
optional readonly expires_in: number;
継承元
Partial.expires_in
id_token?
optional readonly id_token: string;
以下から継承
Partial.id_token
provider
provider: string;
このアカウントのプロバイダーID。例:「google」。完全なリストはhttps://authjs.dokyumento.jp/reference/core/providersを参照してください。
providerAccountId
providerAccountId: string;
この値は、アカウントの作成に使用されるプロバイダーのタイプによって異なります。
- oauth/oidc: OAuthアカウントのID。
profile()
コールバックから返されます。 - email: ユーザーのメールアドレス。
- credentials:
authorize()
コールバックから返されるid
refresh_token?
optional readonly refresh_token: string;
以下から継承
Partial.refresh_token
scope?
optional readonly scope: string;
以下から継承
Partial.scope
token_type?
optional readonly token_type: Lowercase<string>;
注意:この値は大文字と小文字を区別しないため、常に小文字で返されます
以下から継承
Partial.token_type
type
type: ProviderType;
このアカウントのプロバイダータイプ
userId?
optional userId: string;
このアカウントが属するユーザーのID
参照
https://authjs.dokyumento.jp/reference/core/adapters#adapteruser
DefaultSession
拡張元
プロパティ
expires
expires: string;
user?
optional user: User;
NextAuthConfig
NextAuth.jsを構成します。
拡張
Omit
<AuthConfig
,"raw"
>
プロパティ
adapter?
optional adapter: Adapter;
adapterオプションを使用して、データベースアダプターを渡すことができます。
以下から継承
Omit.adapter
basePath?
optional basePath: string;
Auth.js APIエンドポイントのベースパス。
デフォルト
"/api/auth" in "next-auth"; "/auth" with all other frameworks
以下から継承
Omit.basePath
callbacks?
optional callbacks: {
jwt: (params) => Awaitable<null | JWT>;
redirect: (params) => Awaitable<string>;
session: (params) => Awaitable<Session | DefaultSession>;
signIn: (params) => Awaitable<string | boolean>;
} & {
authorized: (params) => any;
};
コールバックは、認証関連のアクションが実行されたときに何が起こるかを制御するために使用できる非同期関数です。コールバックを使用すると、**データベースなしでアクセス制御を実装**したり、**外部データベースまたはAPIと統合**したりできます。
型宣言
jwt()?
optional jwt: (params) => Awaitable<null | JWT>;
このコールバックは、JSON Web Tokenが作成される(サインイン時)または更新される(クライアントでセッションにアクセスするたび)たびに呼び出されます。ここで返すものはすべてJWTに保存され、セッションコールバックに転送されます。そこで、クライアントに返される内容を制御できます。それ以外のものはフロントエンドから保持されます。JWTは、デフォルトでAUTH_SECRET環境変数を使用して暗号化されます。
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
params | Object | - |
params.account ? | null | Account | サインインに使用されたプロバイダーに関する情報が含まれています。 TokenSetも含まれます 注 trigger が "signIn" または "signUp" の場合に使用可能です |
params.isNewUser ? | boolean | 非推奨 代わりに trigger === "signUp" を使用してください |
params.profile ? | プロファイル | プロバイダーから返されるOAuthプロファイル。 (OIDCの場合は、デコードされたIDトークンまたは/userinfoレスポンスになります) 注 trigger が "signIn" の場合に使用可能です。 |
params.session ? | any | AuthConfig.session strategy: "jwt" を使用している場合、これはデータですuseSession().update メソッドを介してクライアントから送信されます。⚠ 注意: このデータを使用する前に検証する必要があります。 |
params.token | JWT | trigger が "signIn" または "signUp" の場合、JWTのサブセットになります。name 、email 、image が含まれます。それ以外の場合、後続の呼び出しでは完全なJWTになります。 |
params.trigger ? | "signIn" | "update" | "signUp" | jwtコールバックが呼び出された理由を確認してください。考えられる理由は次のとおりです - ユーザーサインイン: コールバックが初めて呼び出されるとき、 user 、profile 、account が存在します。- ユーザーサインアップ: データベースで初めてユーザーが作成される(AuthConfig.session.strategyが "database" に設定されている場合)- 更新イベント: useSession().update メソッドによってトリガーされます。後者の場合、 trigger は undefined になります。 |
params.user | AdapterUser | User | OAuthConfig.profileまたはCredentialsConfig.authorizeコールバックの結果のいずれか。 注 trigger が "signIn" または "signUp" の場合に使用可能です。リソース - Credentials Provider - ユーザーデータベースモデル |
戻り値
redirect()?
optional redirect: (params) => Awaitable<string>;
このコールバックは、ユーザーがコールバックURLにリダイレクトされるたびに(サインインまたはサインアウト時)呼び出されます。デフォルトでは、オリジンと同じホスト上のURLのみが許可されています。このコールバックを使用して、その動作をカスタマイズできます。
例
callbacks: {
async redirect({ url, baseUrl }) {
// Allows relative callback URLs
if (url.startsWith("/")) return `${baseUrl}${url}`
// Allows callback URLs on the same origin
if (new URL(url).origin === baseUrl) return url
return baseUrl
}
}
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
params | Object | - |
params.baseUrl | string | サイトのデフォルトベースURL(フォールバックとして使用できます) |
params.url | string | クライアントによってコールバックURLとして提供されるURL |
戻り値
Awaitable
<string
>
session()?
optional session: (params) => Awaitable<Session | DefaultSession>;
このコールバックは、セッションがチェックされるたびに呼び出されます。(つまり、/api/session
エンドポイントの呼び出し時、useSession
またはgetSession
を使用する場合)。戻り値はクライアントに公開されるため、ここで返す内容に注意してください!JWTコールバックを介してトークンに追加したものをクライアントで利用可能にする場合は、ここでも明示的に返す必要があります。
⚠ デフォルトでは、セキュリティを強化するために、トークンのサブセット(メール、名前、画像)のみが返されます。
トークン引数はjwtセッション戦略を使用している場合にのみ利用可能で、ユーザー引数はデータベースセッション戦略を使用している場合にのみ利用可能です。
例
callbacks: {
async session({ session, token, user }) {
// Send properties to the client, like an access_token from a provider.
session.accessToken = token.accessToken
return session
}
}
パラメーター
パラメーター | 型 |
---|---|
params | { session : { user : AdapterUser ; } & AdapterSession ; user : AdapterUser ; } & { session : Session ; token : JWT ; } & { newSession : any ; trigger : "update" ; } |
戻り値
Awaitable
<Session
| DefaultSession
>
signIn()?
optional signIn: (params) => Awaitable<string | boolean>;
ユーザーがサインインを許可されるかどうかを制御します。true
を返すと、サインインフローが続行されます。false
を返すか、エラーをスローすると、サインインフローが停止し、ユーザーはエラーページにリダイレクトされます。文字列を返すと、指定されたURLにユーザーがリダイレクトされます。
処理されないエラーは、元のエラーに設定されたメッセージでAccessDenied
をスローします。
例
callbacks: {
async signIn({ profile }) {
// Only allow sign in for users with email addresses ending with "yourdomain.com"
return profile?.email?.endsWith("@yourdomain.com")
}
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
params | Object | - |
params.account ? | null | Account | - |
params.credentials ? | Record <string , CredentialInput > | Credentialsプロバイダーが使用されている場合、ユーザーの資格情報が含まれます |
params.email ? | Object | Emailプロバイダーが使用されている場合、最初の呼び出しでは、次のものが含まれますverificationRequest: true プロパティは、検証要求フローでトリガーされていることを示します。ユーザーがサインインリンクをクリックした後にコールバックが呼び出されると、 このプロパティは存在しません。 verificationRequest プロパティを確認できますブロックリストにあるアドレスやドメインにメールを送信しないようにするか、許可リストにあるメールアドレスに対してのみ明示的にメールを生成するようにします。 許可リストにあるメールアドレスに対してのみ明示的に生成します。 |
params.email.verificationRequest ? | boolean | - |
params.profile ? | プロファイル | OAuthプロバイダーが使用されている場合は、完全な プロバイダーによって返されたOAuthプロファイルが含まれます。 |
params.user | AdapterUser | User | - |
戻り値
Awaitable
<string
| boolean
>
型宣言
authorized()?
optional authorized: (params) => any;
Middlewareを使用して、ユーザーが認証を必要とするときに呼び出されます。
NextResponseを返すことで、この動作をオーバーライドできます。
例
async authorized({ request, auth }) {
const url = request.nextUrl
if(request.method === "POST") {
const { authToken } = (await request.json()) ?? {}
// If the request has a valid auth token, it is authorized
const valid = await validateAuthToken(authToken)
if(valid) return true
return NextResponse.json("Invalid auth token", { status: 401 })
}
// Logged in users are authenticated, otherwise redirect to login page
return !!auth.user
}
リダイレクトレスポンスを返す場合は、リダイレクト先のページがこのコールバックによって保護されていないことを確認してください。そうしないと、無限のリダイレクトループに陥る可能性があります。
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
params | Object | - |
params.auth | null | Session | 認証されたユーザーまたはトークン(存在する場合)。 |
params.request | NextRequest | 認証されるリクエスト。 |
戻り値
any
オーバーライド
Omit.callbacks
cookies?
optional cookies: Partial<CookiesOptions>;
Auth.jsで使用されるクッキーのデフォルトのクッキー名とオプションをオーバーライドできます。カスタムプロパティを使用して1つ以上のクッキーを指定でき、欠落しているオプションはAuth.jsで定義されたデフォルト値を使用します。この機能を使用する場合、組み込みの動的ポリシーからオプトアウトするため、開発ビルドと本番ビルドで異なるクッキーポリシーを設定するための条件付き動作を作成する必要がある可能性があります。
- ⚠ これは高度なオプションです。 高度なオプションは基本的なオプションと同じように渡されますが、複雑な影響や副作用がある可能性があります。非常に慣れている場合を除き、高度なオプションの使用は避ける必要があります。
デフォルト
{}
継承元
Omit.cookies
debug?
optional debug: boolean;
認証とデータベース操作のデバッグメッセージを有効にするには、デバッグをtrueに設定します。
- ⚠ カスタムのAuthConfig.loggerを追加した場合、この設定は無視されます。
デフォルト
false
継承元
Omit.debug
events?
optional events: {
createUser: (message) => Awaitable<void>;
linkAccount: (message) => Awaitable<void>;
session: (message) => Awaitable<void>;
signIn: (message) => Awaitable<void>;
signOut: (message) => Awaitable<void>;
updateUser: (message) => Awaitable<void>;
};
イベントは応答を返さない非同期関数であり、監査ログに役立ちます。デバッグや監査ログの作成など、以下のイベントのいずれかのハンドラーを指定できます。メッセージオブジェクトの内容は、フロー(OAuthまたはメール認証フロー、JWTまたはデータベースセッションなど)によって異なりますが、通常、ユーザーオブジェクトやJSON Web Tokenの内容、およびイベントに関連するその他の情報が含まれます。
デフォルト
{}
createUser()?
optional createUser: (message) => Awaitable<void>;
パラメーター
パラメーター | 型 |
---|---|
message | Object |
message.user | ユーザー |
戻り値
Awaitable
<void
>
linkAccount()?
optional linkAccount: (message) => Awaitable<void>;
パラメーター
パラメーター | 型 |
---|---|
message | Object |
message.account | アカウント |
message.profile | AdapterUser | User |
message.user | AdapterUser | User |
戻り値
Awaitable
<void
>
session()?
optional session: (message) => Awaitable<void>;
メッセージオブジェクトには、JWTを使用するかデータベース永続化セッションを使用するかによって、次のいずれかが含まれます
token
: このセッションのJWT。session
: アダプターからのセッションオブジェクト。
パラメーター
パラメーター | 型 |
---|---|
message | Object |
message.session | セッション |
message.token | JWT |
戻り値
Awaitable
<void
>
signIn()?
optional signIn: (message) => Awaitable<void>;
credentials
タイプの認証を使用している場合、ユーザーは資格情報プロバイダーからの生の応答です。他のプロバイダーの場合、アダプターからのユーザーオブジェクト、アカウント、およびユーザーがアダプターに新規であったかどうかを示すインジケーターを取得します。
パラメーター
パラメーター | 型 |
---|---|
message | Object |
message.account ? | null | Account |
message.isNewUser ? | boolean |
message.profile ? | プロファイル |
message.user | ユーザー |
戻り値
Awaitable
<void
>
signOut()?
optional signOut: (message) => Awaitable<void>;
メッセージオブジェクトには、JWTを使用するかデータベース永続化セッションを使用するかによって、次のいずれかが含まれます
token
: このセッションのJWT。session
: 終了中のアダプターからのセッションオブジェクト。
パラメーター
パラメーター | 型 |
---|---|
message | { session : undefined | null | void | AdapterSession ; } | { token : null | JWT ; } |
戻り値
Awaitable
<void
>
updateUser()?
optional updateUser: (message) => Awaitable<void>;
パラメーター
パラメーター | 型 |
---|---|
message | Object |
message.user | ユーザー |
戻り値
Awaitable
<void
>
継承元
Omit.events
experimental?
optional experimental: {
enableWebAuthn: boolean;
};
このオプションを使用して、実験的な機能を有効にします。有効にすると、コンソールに警告メッセージが表示されます。
注
実験的な機能は安定性が保証されておらず、予告なしに変更または削除される場合があります。慎重に使用してください。
デフォルト
{}
enableWebAuthn?
optional enableWebAuthn: boolean;
WebAuthnサポートを有効にします。
デフォルト
false
継承元
Omit.experimental
jwt?
optional jwt: Partial<JWTOptions>;
AuthConfig.adapterを指定していない場合、JSON Web Tokenはデフォルトで有効になります。JSON Web Tokenはデフォルトで暗号化(JWE)されています。この動作を維持することをお勧めします。
継承元
Omit.jwt
logger?
optional logger: Partial<LoggerInstance>;
ロガーレベル(undefined
レベルは組み込みのロガーを使用します)をオーバーライドし、NextAuthでログをインターセプトします。このオプションを使用して、NextAuthログをサードパーティのロギングサービスに送信できます。
例
// /auth.ts
import log from "logging-service"
export const { handlers, auth, signIn, signOut } = NextAuth({
logger: {
error(code, ...message) {
log.error(code, message)
},
warn(code, ...message) {
log.warn(code, message)
},
debug(code, ...message) {
log.debug(code, message)
}
}
})
- ⚠ 設定すると、AuthConfig.debugオプションは無視されます
デフォルト
console
継承元
Omit.logger
pages?
optional pages: Partial<PagesOptions>;
カスタムのサインイン、サインアウト、エラーページを作成する場合は、使用するURLを指定します。指定されたページは、対応する組み込みページをオーバーライドします。
デフォルト
{}
例
pages: {
signIn: '/auth/signin',
signOut: '/auth/signout',
error: '/auth/error',
verifyRequest: '/auth/verify-request',
newUser: '/auth/new-user'
}
継承元
Omit.pages
providers
providers: Provider[];
サインインするための認証プロバイダー(例:Google、Facebook、Twitter、GitHub、Emailなど)のリストを任意の順序で指定します。これは組み込みのプロバイダーのいずれか、またはカスタムプロバイダーを持つオブジェクトにすることができます。
デフォルト
[]
継承元
Omit.providers
redirectProxyUrl?
optional redirectProxyUrl: string;
設定すると、OAuthサインインフロー中に、認証リクエストのredirect_uri
がこの値に基づいて設定されます。
これは、OAuthプロバイダーが単一のredirect_uri
のみをサポートしている場合、または最終的なデプロイURLを事前に把握していない(Vercelなどの)プレビューURLでOAuthを使用する場合に役立ちます。
URLには、Auth.jsが初期化される場所までのフルパスを含める必要があります。
注
これにより、プロバイダーでstate
OAuth2Config.checksが自動的に有効になります。
例
"https://authjs.example.com/api/auth"
また、各プロバイダーに対して個別にこれをオーバーライドすることもできます。
例
GitHub({
...
redirectProxyUrl: "https://github.example.com/api/auth"
})
デフォルト
AUTH_REDIRECT_PROXY_URL
環境変数
参考資料: ガイド:プレビューデプロイメントのセキュリティ保護
継承元
Omit.redirectProxyUrl
secret?
optional secret: string | string[];
トークンのハッシュ化、Cookieの署名、暗号鍵の生成に使用されるランダムな文字列。
ランダムな文字列を生成するには、Auth.js CLIを使用できます:npx auth secret
注
秘密鍵の配列を渡すこともできます。その場合、JWTの復号化に成功した最初の秘密鍵が使用されます。これは、既存のセッションを無効にせずに秘密鍵をローテーションする場合に便利です。新しい秘密鍵は配列の先頭に追加する必要があり、それがすべての新しいセッションで使用されます。
継承元
Omit.secret
session?
optional session: {
generateSessionToken: () => string;
maxAge: number;
strategy: "jwt" | "database";
updateAge: number;
};
JWTまたはデータベースを使用する場合、アイドル状態のセッションが期限切れになるまでの時間、またはデータベースを使用している場合に書き込み操作をスロットリングする方法など、セッションを構成します。
generateSessionToken()?
optional generateSessionToken: () => string;
データベースベースのセッション用にカスタムセッショントークンを生成します。デフォルトでは、Node.jsのバージョンに応じてランダムなUUIDまたは文字列が生成されます。ただし、使用する独自のカスタム文字列(CUIDなど)を指定できます。
デフォルト
Node.jsのバージョンに応じてrandomUUID
またはrandomBytes.toHex
戻り値
string
maxAge?
optional maxAge: number;
セッションを期限切れにするまでの、現在からの相対時間(秒単位)
デフォルト
2592000 // 30 days
strategy?
optional strategy: "jwt" | "database";
ユーザーセッションを保存する方法を選択します。デフォルトは、セッションCookie内の暗号化されたJWT(JWE)である"jwt"
です。
ただし、adapter
を使用する場合は、デフォルトで代わりに"database"
になります。 "jwt"
を明示的に定義することで、JWTセッションを強制することもできます。
"database"
を使用する場合、セッションCookieにはsessionToken
値のみが含まれ、これはデータベース内のセッションを検索するために使用されます。
ドキュメント | アダプター | JSON Webトークンについて
updateAge?
optional updateAge: number;
セッションを更新する必要がある頻度(秒単位)。0
に設定すると、セッションは毎回更新されます。
デフォルト
86400 // 1 day
継承元
Omit.session
skipCSRFCheck?
optional skipCSRFCheck: typeof skipCSRFCheck;
継承元
Omit.skipCSRFCheck
theme?
optional theme: Theme;
組み込みのAuthConfig.pagesのテーマを変更します。
継承元
Omit.theme
trustHost?
optional trustHost: boolean;
Auth.jsは、正常に機能するために、受信リクエストのhost
ヘッダーに依存します。このため、このプロパティをtrue
に設定する必要があります。
デプロイメントプラットフォームがhost
ヘッダーを安全に設定していることを確認してください。
公式のAuth.jsベースのライブラリは、host
ヘッダーを安全に設定することがわかっている一部のデプロイメントプラットフォーム(例:Vercel)に対して、この値を自動的に設定しようとします。
継承元
Omit.trustHost
useSecureCookies?
optional useSecureCookies: boolean;
true
に設定すると、NextAuth.jsによって設定されたすべてのCookieは、HTTPS URLからのみアクセス可能になります。このオプションは、開発者の利便性のために、http://
で始まるURL(例:http://localhost:3000)ではデフォルトでfalse
になります。このセキュリティ機能を無効にして、保護されていないURLからCookieにアクセスできるようにするには、このオプションをfalse
に手動で設定できます(これは推奨されません)。
- ⚠ これは高度なオプションです。 高度なオプションは基本的なオプションと同じように渡されますが、複雑な影響や副作用がある可能性があります。非常に慣れている場合を除き、高度なオプションの使用は避ける必要があります。
デフォルトは、HTTPサイトの場合はfalse
、HTTPSサイトの場合はtrue
です。
継承元
Omit.useSecureCookies
NextAuthResult
NextAuthを、NextAuthConfigで初期化して呼び出した結果。Next.jsアプリでNextAuth.jsをセットアップして操作するためのメソッドが含まれています。
プロパティ
auth
auth: (...args) => Promise<null | Session> & (...args) => Promise<null | Session> & (...args) => Promise<null | Session> & (...args) => AppRouteHandlerFn;
Next.jsアプリでNextAuth.jsを操作するためのユニバーサルメソッド。auth.ts
でNextAuth.jsを初期化した後、Middleware、Server Components、Route Handlers(app/
)、およびEdgeまたはNode.js API Routes(pages/
)でこのメソッドを使用します。
Middleware内
Middlewareにauth
を追加することはオプションですが、ユーザーセッションを維持するために推奨されます。
認証は、callbacks.authorizedコールバックによって行われます。
例
export { auth as middleware } from "./auth"
または、req
がauth
で拡張されている場合、auth
で独自のミドルウェアをラップすることもできます。
例
import { auth } from "./auth"
export default auth((req) => {
// req.auth
})
// Optionally, don't invoke Middleware on some paths
// Read more: https://nextjs.dokyumento.jp/docs/app/building-your-application/routing/middleware#matcher
export const config = {
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
}
サーバーコンポーネント内
例
import { auth } from "../auth"
export default async function Page() {
const { user } = await auth()
return <p>Hello {user?.name}</p>
}
ルートハンドラー内
例
import { auth } from "../../auth"
export const POST = auth((req) => {
// req.auth
})
Edge APIルート内
例
import { auth } from "../../auth"
export default auth((req) => {
// req.auth
})
export const config = { runtime: "edge" }
APIルート内
例
import { auth } from "../auth"
import type { NextApiRequest, NextApiResponse } from "next"
export default async (req: NextApiRequest, res: NextApiResponse) => {
const session = await auth(req, res)
if (session) {
// Do something with the session
return res.json("This is protected content.")
}
res.status(401).json("You must be signed in.")
}
getServerSideProps
内
例
import { auth } from "../auth"
export const getServerSideProps: GetServerSideProps = async (context) => {
const session = await auth(context)
if (session) {
// Do something with the session
return { props: { session, content: (await res.json()).content } }
}
return { props: {} }
}
handlers
handlers: AppRouteHandlers;
NextAuth.jsのルートハンドラーメソッド。これらは、OAuth/Emailプロバイダーのエンドポイント、およびクライアントからアクセスできるREST APIエンドポイント(/api/auth/session
など)を公開するために使用されます。
auth.ts
でNextAuth.jsを初期化した後、これらのメソッドを再エクスポートします。
app/api/auth/[...nextauth]/route.ts
内
export { GET, POST } from "../../../../auth"
export const runtime = "edge" // optional
次にauth.ts
// ...
export const { handlers: { GET, POST }, auth } = NextAuth({...})
signIn()
signIn: <P, R>(provider?, options?, authorizationParams?) => Promise<R extends false ? any : never>;
プロバイダーを使用してサインインします。プロバイダーが指定されていない場合、ユーザーはサインインページにリダイレクトされます。
デフォルトでは、ユーザーはサインイン後、現在のページにリダイレクトされます。相対パスでredirectTo
オプションを設定することにより、この動作をオーバーライドできます。
例
import { signIn } from "../auth"
export default function Layout() {
return (
<form action={async () => {
"use server"
await signIn("github")
}}>
<button>Sign in with GitHub</button>
</form>
)
サインイン中にエラーが発生した場合、AuthErrorのインスタンスがスローされます。次のようにキャッチできます
import { AuthError } from "next-auth"
import { signIn } from "../auth"
export default function Layout() {
return (
<form action={async (formData) => {
"use server"
try {
await signIn("credentials", formData)
} catch(error) {
if (error instanceof AuthError) // Handle auth errors
throw error // Rethrow all other errors
}
}}>
<button>Sign in</button>
</form>
)
}
型パラメーター
型パラメーター | 値 |
---|---|
P は BuiltInProviderType | string & {} を拡張します | - |
R は boolean を拡張します | true |
パラメータ
パラメーター | 型 | 説明 |
---|---|---|
provider ? | P | サインインするプロバイダー |
options ? | FormData | { redirect : R ; redirectTo : string ; } & Record <string , any > | - |
authorizationParams ? | string | Record <string , string > | URLSearchParams | string [][] | - |
戻り値
Promise
<R
extends false
? any
: never
>
signOut()
signOut: <R>(options?) => Promise<R extends false ? any : never>;
ユーザーをサインアウトします。セッションがデータベース戦略を使用して作成された場合、セッションはデータベースから削除され、関連する Cookie は無効になります。セッションが JWT を使用して作成された場合、Cookie は無効になります。
デフォルトでは、ユーザーはサインアウト後に現在のページにリダイレクトされます。相対パスを持つ redirectTo
オプションを設定することで、この動作を上書きできます。
例
import { signOut } from "../auth"
export default function Layout() {
return (
<form action={async () => {
"use server"
await signOut()
}}>
<button>Sign out</button>
</form>
)
型パラメータ
型パラメーター | 値 |
---|---|
R は boolean を拡張します | true |
パラメータ
パラメーター | 型 | 説明 |
---|---|---|
options ? | Object | - |
options.redirect ? | R | false に設定した場合、signOut メソッドは自動的にリダイレクトする代わりに、リダイレクト先の URL を返します。 |
options.redirectTo ? | string | サインアウト後にリダイレクトする相対パス。デフォルトでは、ユーザーは現在のページにリダイレクトされます。 |
戻り値
Promise
<R
extends false
? any
: never
>
unstable_update()
unstable_update: (data) => Promise<null | Session>;
パラメータ
パラメーター | 型 |
---|---|
data | Partial <Session | { user : Partial <undefined | User >; }> |
戻り値
プロファイル
OAuth プロバイダーから返されるユーザー情報。
参考
https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims
インデックス可能
[claim
: string
]: unknown
プロパティ
address?
optional address: null | {
country: null | string;
formatted: null | string;
locality: null | string;
postal_code: null | string;
region: null | string;
street_address: null | string;
};
birthdate?
optional birthdate: null | string;
email?
optional email: null | string;
email_verified?
optional email_verified: null | boolean;
family_name?
optional family_name: null | string;
gender?
optional gender: null | string;
given_name?
optional given_name: null | string;
id?
optional id: null | string;
locale?
optional locale: null | string;
middle_name?
optional middle_name: null | string;
name?
optional name: null | string;
nickname?
optional nickname: null | string;
phone_number?
optional phone_number: null | string;
picture?
optional picture: any;
preferred_username?
optional preferred_username: null | string;
profile?
optional profile: null | string;
sub?
optional sub: null | string;
updated_at?
optional updated_at: null | string | number | Date;
website?
optional website: null | string;
zoneinfo?
optional zoneinfo: null | string;
セッション
ログインしているユーザーのアクティブなセッション。
拡張
プロパティ
expires
expires: string;
継承元
user?
optional user: User;
継承元
ユーザー
データベースを使用する場合、OAuth プロバイダーの profile
コールバックで返されるオブジェクトの形状。これは、jwt
コールバックと session
コールバック、または session
コールバックの 2 番目のパラメーターで使用できます。
拡張元
プロパティ
email?
optional email: null | string;
id?
optional id: string;
image?
optional image: null | string;
name?
optional name: null | string;
customFetch
const customFetch: unique symbol;
このオプションを使用すると、プロバイダーがプロバイダーの OAuth エンドポイントに直接リクエストを行うために使用するデフォルトの fetch
関数をオーバーライドできます。誤って使用すると、セキュリティ上の影響が生じる可能性があります。
これは、企業プロキシ、カスタム fetch ライブラリ、キャッシュ検出エンドポイントのサポート、テスト用のモックの追加、ログ記録、非仕様準拠プロバイダー用のカスタムヘッダー/パラメーターの設定などに使用できます。
例
import { Auth, customFetch } from "@auth/core"
import GitHub from "@auth/core/providers/github"
const dispatcher = new ProxyAgent("my.proxy.server")
function proxy(...args: Parameters<typeof fetch>): ReturnType<typeof fetch> {
return undici(args[0], { ...(args[1] ?? {}), dispatcher })
}
const response = await Auth(request, {
providers: [GitHub({ [customFetch]: proxy })]
})
参考
- https://undici.nodejs.org/#/docs/api/ProxyAgent?id=example-basic-proxy-request-with-local-agent-dispatcher
- https://authjs.dokyumento.jp/guides/corporate-proxy
default()
default(config): NextAuthResult
NextAuth.js を初期化します。
パラメータ
パラメーター | 型 |
---|---|
config | NextAuthConfig | (request ) => Awaitable <NextAuthConfig > |
戻り値
例
import NextAuth from "next-auth"
import GitHub from "@auth/core/providers/github"
export const { handlers, auth } = NextAuth({ providers: [GitHub] })
遅延初期化
例
import NextAuth from "next-auth"
import GitHub from "@auth/core/providers/github"
export const { handlers, auth } = NextAuth(async (req) => {
console.log(req) // do something with the request
return {
providers: [GitHub],
},
})