🔐auth0-fastify
- プラグイン
- auth0
- ライセンス
- Apache-2.0
- ソース
- GitHub で見る ↗
説明
次のような場合に使用: Fastifyウェブアプリケーションにセッションベースのログイン、ログアウト、または保護されたルートを追加する場合。 `@auth0/auth0-fastify` を統合します — ユーザーが「Fastifyアプリにログインを追加して」と言った場合にも使用してください。 BearerトークンをバリデートするFastify APIの場合は、代わりに `auth0-fastify-api` を使用してください。
原文を表示
Use when adding session-based login, logout, or protected routes to a Fastify web application. Integrates @auth0/auth0-fastify — use even if the user says "add login to my Fastify app". For Fastify APIs validating Bearer tokens, use auth0-fastify-api instead.
ユースケース
- ✓Fastifyアプリにセッションベースのログインを追加する
- ✓Fastifyアプリにログアウト機能を追加する
- ✓Fastifyで保護されたルートを実装する
本文(日本語訳)
Auth0 Fastify Integration
@auth0/auth0-fastify を使用して、Fastify Webアプリケーションに認証機能を追加します。
前提条件
- Fastifyアプリケーション(v5.x 以降)
- Node.js 20 LTS 以降
- Auth0アカウントおよびアプリケーションの設定済み環境
- Auth0をまだセットアップしていない場合は、先に
auth0-quickstartskillを使用してください
使用しない場合
- シングルページアプリケーション — クライアントサイド認証には
auth0-react、auth0-vue、またはauth0-angularを使用 - Next.jsアプリケーション — クライアント・サーバー両方を扱う
auth0-nextjsskillを使用 - モバイルアプリケーション — React Native / Expo には
auth0-react-nativeを使用 - ステートレスAPI — セッションを使わないJWT検証には、代わりに
@auth0/auth0-fastify-apiを使用 - マイクロサービス — サービス間認証にはJWT検証を使用
クイックスタート手順
1. SDKのインストール
npm install @auth0/auth0-fastify fastify @fastify/view ejs dotenv
2. 環境設定
.env を作成:
AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
SESSION_SECRET=<openssl-rand-hex-64>
APP_BASE_URL=http://localhost:3000
シークレットの生成: openssl rand -hex 64
3. Auth Pluginの設定
Fastifyサーバーを作成します(server.js):
import 'dotenv/config';
import Fastify from 'fastify';
import fastifyAuth0 from '@auth0/auth0-fastify';
import fastifyView from '@fastify/view';
import ejs from 'ejs';
const fastify = Fastify({ logger: true });
// ビューエンジンを登録
await fastify.register(fastifyView, {
engine: { ejs },
root: './views',
});
// Auth0 pluginを設定
await fastify.register(fastifyAuth0, {
domain: process.env.AUTH0_DOMAIN,
clientId: process.env.AUTH0_CLIENT_ID,
clientSecret: process.env.AUTH0_CLIENT_SECRET,
appBaseUrl: process.env.APP_BASE_URL,
sessionSecret: process.env.SESSION_SECRET,
});
fastify.listen({ port: 3000 });
上記の設定により、以下のエンドポイントが自動的に作成されます:
/auth/login— ログインエンドポイント/auth/logout— ログアウトエンドポイント/auth/callback— OAuthコールバック
4. ルートの追加
// パブリックルート
fastify.get('/', async (request, reply) => {
const session = await fastify.auth0Client.getSession({ request, reply });
return reply.view('views/home.ejs', {
isAuthenticated: !!session,
});
});
// 保護されたルート
fastify.get('/profile', {
preHandler: async (request, reply) => {
const session = await fastify.auth0Client.getSession({ request, reply });
if (!session) {
return reply.redirect('/auth/login');
}
}
}, async (request, reply) => {
const user = await fastify.auth0Client.getUser({ request, reply });
return reply.view('views/profile.ejs', { user });
});
5. 認証のテスト
サーバーを起動します:
node server.js
http://localhost:3000 にアクセスし、ログインフローを確認してください。
よくある間違い
| 間違い | 対処法 |
|---|---|
| Auth0 DashboardへのコールバックURLの追加忘れ | Allowed Callback URLs に /auth/callback パスを追加(例: http://localhost:3000/auth/callback) |
| SESSION_SECRETが未設定または強度不足 | openssl rand -hex 64 で安全な64文字のシークレットを生成し、.envに保存する |
| Auth0でアプリをSPAタイプとして作成してしまった | サーバーサイド認証には「Regular Web Application」タイプを使用する必要がある |
| セッションシークレットをコードにハードコード | 常に環境変数を使用し、シークレットを直接コードに埋め込まない |
| 本番環境で appBaseUrl が誤っている | APP_BASE_URL を本番ドメインに合わせて更新する |
fastify.register を await していない |
Fastify v4以降ではplugin登録時にawaitが必要 |
関連Skill
auth0-quickstart— Auth0の基本セットアップauth0-migration— 別の認証プロバイダーからの移行auth0-mfa— 多要素認証(MFA)の追加auth0-cli— ターミナルからのAuth0リソース管理
クイックリファレンス
Plugin オプション:
domain— Auth0テナントドメイン(必須)clientId— Auth0クライアントID(必須)clientSecret— Auth0クライアントシークレット(必須)appBaseUrl— アプリケーションURL(必須)sessionSecret— セッション暗号化シークレット(必須、64文字以上)audience— APIオーディエンス(任意、API呼び出し時に使用)
クライアントメソッド:
fastify.auth0Client.getSession({ request, reply })— ユーザーセッションを取得fastify.auth0Client.getUser({ request, reply })— ユーザープロフィールを取得fastify.auth0Client.getAccessToken({ request, reply })— アクセストークンを取得fastify.auth0Client.logout(options, { request, reply })— ユーザーをログアウト
主なユースケース:
- 保護されたルート →
preHandlerでセッションを確認(手順4を参照) - 認証状態の確認 →
!!session - ユーザー情報の取得 →
getUser({ request, reply }) - APIの呼び出し →
getAccessToken({ request, reply })
参考リンク
原文(English)を表示
Auth0 Fastify Integration
Add authentication to Fastify web applications using @auth0/auth0-fastify.
Prerequisites
- Fastify application (v5.x or newer)
- Node.js 20 LTS or newer
- Auth0 account and application configured
- If you don't have Auth0 set up yet, use the
auth0-quickstartskill first
When NOT to Use
- Single Page Applications - Use
auth0-react,auth0-vue, orauth0-angularfor client-side auth - Next.js applications - Use
auth0-nextjsskill which handles both client and server - Mobile applications - Use
auth0-react-nativefor React Native/Expo - Stateless APIs - Use
@auth0/auth0-fastify-apiinstead for JWT validation without sessions - Microservices - Use JWT validation for service-to-service auth
Quick Start Workflow
1. Install SDK
npm install @auth0/auth0-fastify fastify @fastify/view ejs dotenv
2. Configure Environment
Create .env:
AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
SESSION_SECRET=<openssl-rand-hex-64>
APP_BASE_URL=http://localhost:3000
Generate secret: openssl rand -hex 64
3. Configure Auth Plugin
Create your Fastify server (server.js):
import 'dotenv/config';
import Fastify from 'fastify';
import fastifyAuth0 from '@auth0/auth0-fastify';
import fastifyView from '@fastify/view';
import ejs from 'ejs';
const fastify = Fastify({ logger: true });
// Register view engine
await fastify.register(fastifyView, {
engine: { ejs },
root: './views',
});
// Configure Auth0 plugin
await fastify.register(fastifyAuth0, {
domain: process.env.AUTH0_DOMAIN,
clientId: process.env.AUTH0_CLIENT_ID,
clientSecret: process.env.AUTH0_CLIENT_SECRET,
appBaseUrl: process.env.APP_BASE_URL,
sessionSecret: process.env.SESSION_SECRET,
});
fastify.listen({ port: 3000 });
This automatically creates:
/auth/login- Login endpoint/auth/logout- Logout endpoint/auth/callback- OAuth callback
4. Add Routes
// Public route
fastify.get('/', async (request, reply) => {
const session = await fastify.auth0Client.getSession({ request, reply });
return reply.view('views/home.ejs', {
isAuthenticated: !!session,
});
});
// Protected route
fastify.get('/profile', {
preHandler: async (request, reply) => {
const session = await fastify.auth0Client.getSession({ request, reply });
if (!session) {
return reply.redirect('/auth/login');
}
}
}, async (request, reply) => {
const user = await fastify.auth0Client.getUser({ request, reply });
return reply.view('views/profile.ejs', { user });
});
5. Test Authentication
Start your server:
node server.js
Visit http://localhost:3000 and test the login flow.
Common Mistakes
| Mistake | Fix |
|---|---|
| Forgot to add callback URL in Auth0 Dashboard | Add /auth/callback path to Allowed Callback URLs (e.g., http://localhost:3000/auth/callback) |
| Missing or weak SESSION_SECRET | Generate secure 64-char secret with openssl rand -hex 64 and store in .env |
| App created as SPA type in Auth0 | Must be Regular Web Application type for server-side auth |
| Session secret exposed in code | Always use environment variables, never hardcode secrets |
| Wrong appBaseUrl for production | Update APP_BASE_URL to match your production domain |
| Not awaiting fastify.register | Fastify v4+ requires awaiting plugin registration |
Related Skills
auth0-quickstart- Basic Auth0 setupauth0-migration- Migrate from another auth providerauth0-mfa- Add Multi-Factor Authenticationauth0-cli- Manage Auth0 resources from the terminal
Quick Reference
Plugin Options:
domain- Auth0 tenant domain (required)clientId- Auth0 client ID (required)clientSecret- Auth0 client secret (required)appBaseUrl- Application URL (required)sessionSecret- Session encryption secret (required, min 64 chars)audience- API audience (optional, for calling APIs)
Client Methods:
fastify.auth0Client.getSession({ request, reply })- Get user sessionfastify.auth0Client.getUser({ request, reply })- Get user profilefastify.auth0Client.getAccessToken({ request, reply })- Get access tokenfastify.auth0Client.logout(options, { request, reply })- Logout user
Common Use Cases:
- Protected routes → Use
preHandlerto check session (see Step 4) - Check auth status →
!!session - Get user info →
getUser({ request, reply }) - Call APIs →
getAccessToken({ request, reply })
References
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。