OAuthプロバイダーの設定
デフォルトのプロバイダー設定のオーバーライド
ビルトインプロバイダーの場合、通常はクライアントIDとクライアントシークレット、そしてOIDC(OpenID Connect)の場合はissuerも指定するだけで済みます。環境変数からこれらを推測できます。
デフォルトのプロバイダー設定オプションをオーバーライドする必要がある場合は、プロバイダーの関数呼び出しにそれらを追加すると、デフォルト値と深くマージされます。つまり、異なる必要があるオプションの一部だけをオーバーライドするだけで済みます。たとえば、スコープを変更する場合は、authorization
オプション全体ではなく、authorization.params.scope
をオーバーライドするだけで十分です。
たとえば、プロバイダーのデフォルトのscope
をオーバーライドするには、次の手順を実行します。
import NextAuth from "next-auth";
import Auth0 from "next-auth/providers/auth0";
export const { handlers, auth } = NextAuth({
providers: [
Auth0({ authorization: { params: { scope: "openid custom_scope" } } }),
],
});
別の例として、profile
コールバックはデフォルトでname
、email
、picture
を返しますが、プロバイダーからより多くの情報を返す必要があるかもしれません。返された情報は、データベースにユーザーオブジェクトを作成するために使用されます。
import NextAuth from "next-auth";
import Auth0 from "next-auth/providers/auth0";
export const { handlers, auth } = NextAuth({
providers: [
Auth0({
// You can also make calls to external resources if necessary.
async profile(profile) {
return {};
},
}),
],
});
独自の提供者の使用
ゼロから作成する前に、まずビルトインOAuthプロバイダーを確認してください。
当社は、OAuthまたはOIDCに準拠したプロバイダーをサポートしています。providers
リストにオブジェクトを渡すことから始めます。
import NextAuth from "next-auth";
export const { handlers, auth } = NextAuth({
providers: [{
id: "my-provider", // signIn("my-provider") and will be part of the callback URL
name: "My Provider", // optional, used on the default login page as the button text.
type: "oidc", // or "oauth" for OAuth 2 providers
issuer: "https://my.oidc-provider.com", // to infer the .well-known/openid-configuration URL
clientId: process.env.AUTH_CLIENT_ID, // from the provider's dashboard
clientSecret: process.env.AUTH_CLIENT_SECRET, // from the provider's dashboard
}],
});
次に、プロバイダーのダッシュボードでコールバックURLをhttps://app.com/{basePath}/callback/{id}
に設定します。
デフォルトでは、basePath
はNext.jsの場合/api/auth
、その他の統合ではすべて/auth
です。basePath
を参照してください。
以上です!🎉
新しいビルトインプロバイダーの追加
カスタムプロバイダーが他の人にも役立つと思われる場合は、PRを開いてビルトインリストに追加することをお勧めします。
プロバイダーファイルの作成
packages/core/src/providers
ディレクトリの下に、新しい{provider}.ts
ファイルを作成します。
コード規約への準拠
ビルトインプロバイダーをガイドとして使用し、プロバイダーが同じコード規約に準拠していることを確認してください。つまり
- TypeScriptを使用する
- 名前付きのデフォルトエクスポートを使用する:
export default function YourProvider
- プロバイダーで使用可能なユーザー情報のプロパティを定義するTypeScriptの
interface
をエクスポートする - 必要なJSDocコメント/ドキュメントを追加します。たとえば、Auth0プロバイダーはOIDCの良い例であり、GitHubプロバイダーはOAuthプロバイダーです。
- プロバイダーのAPIリファレンス/ドキュメントへのリンクを追加して、他の人がこのプロバイダーの設定方法を理解できるようにします。
GitHub issue ドロップダウンへのプロバイダーの追加
プロバイダーの問題テンプレート
で、Provider type
ドロップダウンオプションに新しいプロバイダー名を追加します。
ロゴの追加
docs/static/img/providers
ディレクトリに、{provider}.svg
ロゴを追加します。
PRがマージされると、他の人も当社の統合を使用してこのプロバイダーを発見し、使用できるようになります。以上です!🎉