NextAuth.js Patterns
スキル概要
コアドメイン:
- NextAuth.js v5設定
- プロバイダー設定
- アダプター統合
- セッションコールバック
基本設定
auth.ts設定
import NextAuth from "next-auth";
import Google from "next-auth/providers/google";
import { DrizzleAdapter } from "@auth/drizzle-adapter";
import { db } from "@/infrastructure/database";
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: DrizzleAdapter(db),
providers: [
Google({
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
}),
],
session: {
strategy: "jwt", // or 'database'
maxAge: 30 * 24 * 60 * 60, // 30日
},
callbacks: {
async jwt({ token, user }) {
if (user) {
token.role = user.role;
}
return token;
},
async session({ session, token }) {
if (token) {
session.user.role = token.role;
}
return session;
},
},
});
Route Handler設定
// app/api/auth/[...nextauth]/route.ts
import { handlers } from "@/auth";
export const { GET, POST } = handlers;
プロバイダー設定
Google OAuth 2.0
import Google from "next-auth/providers/google";
Google({
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
authorization: {
params: {
scope: "openid email profile",
prompt: "select_account", // アカウント選択強制
},
},
});
GitHub OAuth 2.0
import GitHub from "next-auth/providers/github";
GitHub({
clientId: process.env.GITHUB_CLIENT_ID!,
clientSecret: process.env.GITHUB_CLIENT_SECRET!,
authorization: {
params: {
scope: "read:user user:email",
},
},
});
アダプター統合
Drizzle Adapter
import { DrizzleAdapter } from "@auth/drizzle-adapter";
import { db } from "@/infrastructure/database";
export const { handlers, auth } = NextAuth({
adapter: DrizzleAdapter(db),
// 必須テーブル: users, accounts, sessions, verificationTokens
});
セッションコールバック
ロール情報の追加
callbacks: {
async jwt({ token, user, trigger }) {
// 初回ログイン時
if (user) {
token.role = user.role;
token.userId = user.id;
}
// セッション更新時
if (trigger === 'update') {
const updatedUser = await db.users.findOne({ id: token.userId });
token.role = updatedUser.role;
}
return token;
},
async session({ session, token }) {
session.user.id = token.userId;
session.user.role = token.role;
return session;
},
}
リソース参照
cat .claude/skills/nextauth-patterns/resources/provider-configurations.md
cat .claude/skills/nextauth-patterns/resources/adapter-integration.md
テンプレート参照
cat .claude/skills/nextauth-patterns/templates/nextauth-config-template.ts
スクリプト実行
node .claude/skills/nextauth-patterns/scripts/validate-nextauth-config.mjs auth.ts
判断基準
ベストプラクティス
- JWT戦略: スケーラブル、ステートレス
- Database戦略: セキュア、即座無効化可能
- 型拡張: next-auth.d.tsで型定義拡張
- 環境変数: シークレット管理
バージョン履歴
| バージョン |
日付 |
変更内容 |
| 1.0.0 |
2025-11-26 |
初版リリース - NextAuth.js v5パターン |