Awesome-omni-skill auth0-fastify
Use when adding authentication to Fastify server-rendered web applications with session management - integrates @auth0/auth0-fastify for high-performance web apps
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/auth0-fastify" ~/.claude/skills/diegosouzapw-awesome-omni-skill-auth0-fastify && rm -rf "$T"
manifest:
skills/development/auth0-fastify/SKILL.mdsource content
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
skill firstauth0-quickstart
When NOT to Use
- Single Page Applications - Use
,auth0-react
, orauth0-vue
for client-side authauth0-angular - Next.js applications - Use
skill which handles both client and serverauth0-nextjs - Mobile applications - Use
for React Native/Expoauth0-react-native - Stateless APIs - Use
instead for JWT validation without sessions@auth0/auth0-fastify-api - 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:
- Login endpoint/auth/login
- Logout endpoint/auth/logout
- OAuth callback/auth/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 path to Allowed Callback URLs (e.g., ) |
| Missing or weak SESSION_SECRET | Generate secure 64-char secret with 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
- Basic Auth0 setupauth0-quickstart
- Migrate from another auth providerauth0-migration
- Add Multi-Factor Authenticationauth0-mfa
Quick Reference
Plugin Options:
- Auth0 tenant domain (required)domain
- Auth0 client ID (required)clientId
- Auth0 client secret (required)clientSecret
- Application URL (required)appBaseUrl
- Session encryption secret (required, min 64 chars)sessionSecret
- API audience (optional, for calling APIs)audience
Client Methods:
- Get user sessionfastify.auth0Client.getSession({ request, reply })
- Get user profilefastify.auth0Client.getUser({ request, reply })
- Get access tokenfastify.auth0Client.getAccessToken({ request, reply })
- Logout userfastify.auth0Client.logout(options, { request, reply })
Common Use Cases:
- Protected routes → Use
to check session (see Step 4)preHandler - Check auth status →
!!session - Get user info →
getUser({ request, reply }) - Call APIs →
getAccessToken({ request, reply })