コンテンツにスキップ
NextAuth.js v4 からの移行ですか?以下をご覧ください 移行ガイド.

next-auth

v4から移行する場合は、アップグレードガイド (v5) を参照してください。

インストール

npm install next-auth@beta

環境変数の推論

NEXTAUTH_URLNEXTAUTH_SECRET は v4 から推論されています。

NextAuth.js v5 以降では、AUTH_ をプレフィックスとする環境変数も自動的に推論できます。

たとえば、AUTH_GITHUB_IDAUTH_GITHUB_SECRET は、GitHub プロバイダーの clientId オプションと clientSecret オプションとして使用されます。

💡

環境変数名の推論は、OAuth プロバイダーの場合、次の形式になります: AUTH_{PROVIDER}_{ID|SECRET}

PROVIDER は、プロバイダーの ID の大文字スネークケースバージョンで、その後に ID または SECRET が続きます。

AUTH_SECRETAUTH_URL は、一貫性を保つために NEXTAUTH_SECRETNEXTAUTH_URL のエイリアスとしても使用されます。

アプリにソーシャルログインを追加する場合、構成は次のようになります

auth.ts
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { handlers, auth } = NextAuth({ providers: [ GitHub ] })

そして .env.local ファイル

.env.local
AUTH_GITHUB_ID=...
AUTH_GITHUB_SECRET=...
AUTH_SECRET=...
💡

本番環境では、AUTH_SECRET は必須の環境変数です。設定されていない場合、NextAuth.js はエラーをスローします。詳細については、MissingSecretError を参照してください。

プロバイダーのデフォルト値を上書きする必要がある場合は、以前と同様に GitHub({...}) として関数を呼び出すことができます。

遅延初期化

また、NextAuth.js を遅延的に初期化することもできます (以前は高度な初期化として知られていました)。これにより、ルートハンドラー、ミドルウェア、API ルート、または getServerSideProps のように、場合によっては構成でリクエストコンテキストにアクセスできます。上記の例は次のようになります

auth.ts
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
戻り値

AuthError

オーバーライド

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

パラメータ
パラメーター
errError
stackTracesCallSite[]
戻り値

any

継承元

Error.prepareStackTrace

stackTraceLimit

static stackTraceLimit: number;
継承元

Error.stackTraceLimit

メソッド

captureStackTrace()

static captureStackTrace(targetObject, constructorOpt?): void

ターゲットオブジェクトに .stack プロパティを作成します

パラメータ
パラメーター
targetObjectobject
constructorOpt?Function
戻り値

void

継承元

Error.captureStackTrace


CredentialsSignin

Credentials プロバイダーの authorize コールバックからスローされる可能性があります。authorize コールバック中にエラーが発生した場合、次の 2 つのことが起こり得ます。

  1. ユーザーは、URL に error=CredentialsSignin&code=credentials を含めてサインインページにリダイレクトされます。code は設定可能です。
  2. フォームアクションをサーバー側で処理するフレームワークでこのエラーをスローした場合、ユーザーをリダイレクトするのではなく、このエラーがスローされるため、処理する必要があります。

拡張

コンストラクタ

new CredentialsSignin(message, errorOptions)

new CredentialsSignin(message?, errorOptions?): CredentialsSignin
パラメータ
パラメーター
message?string | ErrorOptions
errorOptions?ErrorOptions
戻り値

CredentialsSignin

継承元

SignInError.constructor

プロパティ

cause?

optional cause: Record<string, unknown> & {
  err: Error;
};
型宣言
err?
optional err: Error;
継承元

SignInError.cause

code

code: string;

リダイレクト URL の code クエリパラメータに設定されるエラーコード。

⚠ 注意: このプロパティは URL に含まれるため、機密性の高いエラーを示唆しないようにしてください。

デバッグが必要な場合は、常にサーバーに完全なエラーが記録されます。

一般的に、ユーザーが間違ったユーザー名またはパスワードを特定したかどうかを具体的に示唆することはお勧めしません。「無効な資格情報」のようなものを試してください。

message

message: string;
継承元

SignInError.message

name

name: string;
継承元

SignInError.name

stack?

optional stack: string;
継承元

SignInError.stack

type

type: ErrorType;

エラーの種類。ログでエラーを識別するために使用します。

継承元

SignInError.type

kind

static kind: string;
継承元

SignInError.kind

prepareStackTrace()?

static optional prepareStackTrace: (err, stackTraces) => any;

スタックトレースのフォーマットをオーバーライドするためのオプション

参照

https://v8.dokyumento.jp/docs/stack-trace-api#customizing-stack-traces

パラメータ
パラメーター
errError
stackTracesCallSite[]
戻り値

any

継承元

SignInError.prepareStackTrace

stackTraceLimit

static stackTraceLimit: number;
継承元

SignInError.stackTraceLimit

type

static type: string;

メソッド

captureStackTrace()

static captureStackTrace(targetObject, constructorOpt?): void

ターゲットオブジェクトに .stack プロパティを作成します

パラメータ
パラメーター
targetObjectobject
constructorOpt?Function
戻り値

void

継承元

SignInError.captureStackTrace


アカウント

通常、使用されているプロバイダーに関する情報が含まれており、OAuth プロバイダーから返されるさまざまなトークンである TokenSet も拡張します。

拡張

プロパティ

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 と組み合わせてトークンローテーションを実装するために使用できます。

参照

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を構成します。

拡張

プロパティ

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環境変数を使用して暗号化されます。

session コールバック

パラメーター
パラメーター説明
paramsObject-
params.account?null | Accountサインインに使用されたプロバイダーに関する情報が含まれています。
TokenSetも含まれます


trigger"signIn" または "signUp" の場合に使用可能です
params.isNewUser?boolean非推奨
代わりにtrigger === "signUp"を使用してください
params.profile?プロファイルプロバイダーから返されるOAuthプロファイル。
(OIDCの場合は、デコードされたIDトークンまたは/userinfoレスポンスになります)


trigger"signIn" の場合に使用可能です。
params.session?anyAuthConfig.session strategy: "jwt" を使用している場合、これはデータです
useSession().updateメソッドを介してクライアントから送信されます。

⚠ 注意: このデータを使用する前に検証する必要があります。
params.tokenJWTtrigger"signIn" または "signUp" の場合、JWTのサブセットになります。
nameemailimageが含まれます。

それ以外の場合、後続の呼び出しでは完全なJWTになります。
params.trigger?"signIn" | "update" | "signUp"jwtコールバックが呼び出された理由を確認してください。考えられる理由は次のとおりです
- ユーザーサインイン: コールバックが初めて呼び出されるとき、userprofileaccountが存在します。
- ユーザーサインアップ: データベースで初めてユーザーが作成される(AuthConfig.session.strategyが"database"に設定されている場合)
- 更新イベント: useSession().update メソッドによってトリガーされます。
後者の場合、triggerundefined になります。
params.userAdapterUser | UserOAuthConfig.profileまたはCredentialsConfig.authorizeコールバックの結果のいずれか。


trigger"signIn" または "signUp" の場合に使用可能です。

リソース
- Credentials Provider
- ユーザーデータベースモデル
戻り値

Awaitable<null | JWT>

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
  }
}
パラメーター
パラメーター説明
paramsObject-
params.baseUrlstringサイトのデフォルトベースURL(フォールバックとして使用できます)
params.urlstringクライアントによってコールバックURLとして提供されるURL
戻り値

Awaitable<string>

session()?
optional session: (params) => Awaitable<Session | DefaultSession>;

このコールバックは、セッションがチェックされるたびに呼び出されます。(つまり、/api/sessionエンドポイントの呼び出し時、useSessionまたはgetSessionを使用する場合)。戻り値はクライアントに公開されるため、ここで返す内容に注意してください!JWTコールバックを介してトークンに追加したものをクライアントで利用可能にする場合は、ここでも明示的に返す必要があります。

⚠ デフォルトでは、セキュリティを強化するために、トークンのサブセット(メール、名前、画像)のみが返されます。

トークン引数は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をスローします。

AccessDenied

callbacks: {
 async signIn({ profile }) {
  // Only allow sign in for users with email addresses ending with "yourdomain.com"
  return profile?.email?.endsWith("@yourdomain.com")
}
パラメーター
パラメーター説明
paramsObject-
params.account?null | Account-
params.credentials?Record<string, CredentialInput>Credentialsプロバイダーが使用されている場合、ユーザーの資格情報が含まれます
params.email?ObjectEmailプロバイダーが使用されている場合、最初の呼び出しでは、次のものが含まれます
verificationRequest: trueプロパティは、検証要求フローでトリガーされていることを示します。
ユーザーがサインインリンクをクリックした後にコールバックが呼び出されると、
このプロパティは存在しません。verificationRequestプロパティを確認できます
ブロックリストにあるアドレスやドメインにメールを送信しないようにするか、許可リストにあるメールアドレスに対してのみ明示的にメールを生成するようにします。
許可リストにあるメールアドレスに対してのみ明示的に生成します。
params.email.verificationRequest?boolean-
params.profile?プロファイルOAuthプロバイダーが使用されている場合は、完全な
プロバイダーによって返されたOAuthプロファイルが含まれます。
params.userAdapterUser | User-
戻り値

Awaitable<string | boolean>

型宣言
authorized()?
optional authorized: (params) => any;

Middlewareを使用して、ユーザーが認証を必要とするときに呼び出されます。

NextResponseを返すことで、この動作をオーバーライドできます。

app/auth.ts
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
}
⚠️

リダイレクトレスポンスを返す場合は、リダイレクト先のページがこのコールバックによって保護されていないことを確認してください。そうしないと、無限のリダイレクトループに陥る可能性があります。

パラメーター
パラメーター説明
paramsObject-
params.authnull | Session認証されたユーザーまたはトークン(存在する場合)。
params.requestNextRequest認証されるリクエスト。
戻り値

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>;
パラメーター
パラメーター
messageObject
message.userユーザー
戻り値

Awaitable<void>

linkAccount()?
optional linkAccount: (message) => Awaitable<void>;
パラメーター
パラメーター
messageObject
message.accountアカウント
message.profileAdapterUser | User
message.userAdapterUser | User
戻り値

Awaitable<void>

session()?
optional session: (message) => Awaitable<void>;

メッセージオブジェクトには、JWTを使用するかデータベース永続化セッションを使用するかによって、次のいずれかが含まれます

  • token: このセッションのJWT。
  • session: アダプターからのセッションオブジェクト。
パラメーター
パラメーター
messageObject
message.sessionセッション
message.tokenJWT
戻り値

Awaitable<void>

signIn()?
optional signIn: (message) => Awaitable<void>;

credentialsタイプの認証を使用している場合、ユーザーは資格情報プロバイダーからの生の応答です。他のプロバイダーの場合、アダプターからのユーザーオブジェクト、アカウント、およびユーザーがアダプターに新規であったかどうかを示すインジケーターを取得します。

パラメーター
パラメーター
messageObject
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>;
パラメーター
パラメーター
messageObject
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)
    }
  }
})
デフォルト
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コールバックによって行われます。

middleware.ts
export { auth as middleware } from "./auth"

または、reqauthで拡張されている場合、authで独自のミドルウェアをラップすることもできます。

middleware.ts
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).*)"],
}

サーバーコンポーネント内

app/page.ts
import { auth } from "../auth"
 
export default async function Page() {
  const { user } = await auth()
  return <p>Hello {user?.name}</p>
}

ルートハンドラー内

app/api/route.ts
import { auth } from "../../auth"
 
export const POST = auth((req) => {
  // req.auth
})

Edge APIルート内

pages/api/protected.ts
import { auth } from "../../auth"
 
export default auth((req) => {
  // req.auth
})
 
export const config = { runtime: "edge" }

APIルート内

pages/api/protected.ts
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

pages/protected-ssr.ts
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

app/api/auth/[...nextauth]/route.ts
export { GET, POST } from "../../../../auth"
export const runtime = "edge" // optional

次にauth.ts

auth.ts
// ...
export const { handlers: { GET, POST }, auth } = NextAuth({...})

signIn()

signIn: <P, R>(provider?, options?, authorizationParams?) => Promise<R extends false ? any : never>;

プロバイダーを使用してサインインします。プロバイダーが指定されていない場合、ユーザーはサインインページにリダイレクトされます。

デフォルトでは、ユーザーはサインイン後、現在のページにリダイレクトされます。相対パスでredirectToオプションを設定することにより、この動作をオーバーライドできます。

app/layout.tsx
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のインスタンスがスローされます。次のようにキャッチできます

app/layout.tsx
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>
 )
}
型パラメーター
型パラメーター
PBuiltInProviderType | string & {} を拡張します-
Rboolean を拡張します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 オプションを設定することで、この動作を上書きできます。

app/layout.tsx
import { signOut } from "../auth"
 
export default function Layout() {
 return (
  <form action={async () => {
    "use server"
    await signOut()
  }}>
   <button>Sign out</button>
  </form>
)
型パラメータ
型パラメーター
Rboolean を拡張しますtrue
パラメータ
パラメーター説明
options?Object-
options.redirect?Rfalse に設定した場合、signOut メソッドは自動的にリダイレクトする代わりに、リダイレクト先の URL を返します。
options.redirectTo?stringサインアウト後にリダイレクトする相対パス。デフォルトでは、ユーザーは現在のページにリダイレクトされます。
戻り値

Promise<R extends false ? any : never>

unstable_update()

unstable_update: (data) => Promise<null | Session>;
パラメータ
パラメーター
dataPartial<Session | { user: Partial<undefined | User>; }>
戻り値

Promise<null | Session>


プロファイル

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;
継承元

DefaultSession.expires

user?

optional user: User;
継承元

DefaultSession.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 })]
})

参考


default()

default(config): NextAuthResult

NextAuth.js を初期化します。

パラメータ

パラメーター
configNextAuthConfig | (request) => Awaitable<NextAuthConfig>

戻り値

NextAuthResult

auth.ts
import NextAuth from "next-auth"
import GitHub from "@auth/core/providers/github"
 
export const { handlers, auth } = NextAuth({ providers: [GitHub] })

遅延初期化

auth.ts
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],
  },
})
Auth.js © Balázs Orbán およびチーム -2024