Awesome-omni-skill auth0-express
Use when adding authentication to Express.js server-rendered web applications with session management - integrates express-openid-connect for traditional 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-express-auth0" ~/.claude/skills/diegosouzapw-awesome-omni-skill-auth0-express-146a49 && rm -rf "$T"
manifest:
skills/development/auth0-express-auth0/SKILL.mdsource content
Auth0 Express Integration
Add authentication to Express.js web applications using express-openid-connect.
Prerequisites
- Express.js application
- 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 JWT validation middleware instead of session-based auth
- Microservices - Use JWT validation for service-to-service auth
Quick Start Workflow
1. Install SDK
npm install express-openid-connect dotenv
2. Configure Environment
For automated setup with Auth0 CLI, see Setup Guide for complete scripts.
For manual setup:
Create
.env:
SECRET=<openssl-rand-hex-32> BASE_URL=http://localhost:3000 CLIENT_ID=your-client-id CLIENT_SECRET=your-client-secret ISSUER_BASE_URL=https://your-tenant.auth0.com
Generate secret:
openssl rand -hex 32
3. Configure Auth Middleware
Update your Express app (
app.js or index.js):
require('dotenv').config(); const express = require('express'); const { auth, requiresAuth } = require('express-openid-connect'); const app = express(); // Configure Auth0 middleware app.use(auth({ authRequired: false, // Don't require auth for all routes auth0Logout: true, // Enable logout endpoint secret: process.env.SECRET, baseURL: process.env.BASE_URL, clientID: process.env.CLIENT_ID, issuerBaseURL: process.env.ISSUER_BASE_URL, clientSecret: process.env.CLIENT_SECRET })); app.listen(3000, () => { console.log('Server running on http://localhost:3000'); });
This automatically creates:
- Login endpoint/login
- Logout endpoint/logout
- OAuth callback/callback
4. Add Routes
// Public route app.get('/', (req, res) => { res.send(req.oidc.isAuthenticated() ? 'Logged in' : 'Logged out'); }); // Protected route app.get('/profile', requiresAuth(), (req, res) => { res.send(` <h1>Profile</h1> <p>Name: ${req.oidc.user.name}</p> <p>Email: ${req.oidc.user.email}</p> <pre>${JSON.stringify(req.oidc.user, null, 2)}</pre> <a href="/logout">Logout</a> `); }); // Login/logout links app.get('/', (req, res) => { res.send(` ${req.oidc.isAuthenticated() ? ` <p>Welcome, ${req.oidc.user.name}!</p> <a href="/profile">Profile</a> <a href="/logout">Logout</a> ` : ` <a href="/login">Login</a> `} `); });
5. Test Authentication
Start your server:
node app.js
Visit
http://localhost:3000 and test the login flow.
Detailed Documentation
- Setup Guide - Automated setup scripts, environment configuration, Auth0 CLI usage
- Integration Guide - Protected routes, sessions, API integration, error handling
- API Reference - Complete middleware API, configuration options, request properties
Common Mistakes
| Mistake | Fix |
|---|---|
| Forgot to add callback URL in Auth0 Dashboard | Add path to Allowed Callback URLs (e.g., ) |
| Missing or weak SECRET | Generate secure secret with and store in .env as |
| Setting authRequired: true globally | Set to false and use middleware on specific routes |
| 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 baseURL for production | Update BASE_URL to match your production domain |
| Not handling logout returnTo | Add your domain to Allowed Logout URLs in Auth0 Dashboard |
Related Skills
- Basic Auth0 setupauth0-quickstart
- Migrate from another auth providerauth0-migration
- Add Multi-Factor Authenticationauth0-mfa
Quick Reference
Middleware Options:
- Require auth for all routes (default: false)authRequired
- Enable /logout endpoint (default: false)auth0Logout
- Session secret (required)secret
- Application URL (required)baseURL
- Auth0 client ID (required)clientID
- Auth0 tenant URL (required)issuerBaseURL
Request Properties:
- Check if user is logged inreq.oidc.isAuthenticated()
- User profile objectreq.oidc.user
- Access token for API callsreq.oidc.accessToken
- ID tokenreq.oidc.idToken
- Refresh tokenreq.oidc.refreshToken
Common Use Cases:
- Protected routes → Use
middleware (see Step 4)requiresAuth() - Check auth status →
req.oidc.isAuthenticated() - Get user info →
req.oidc.user - Call APIs → Integration Guide