Loading...
Loading...
Use when adding authentication to Express.js server-rendered web applications with session management - integrates express-openid-connect for traditional web apps
npx skill4agent add auth0/agent-skills auth0-expressauth0-quickstartauth0-reactauth0-vueauth0-angularauth0-nextjsauth0-react-nativenpm install express-openid-connect dotenv.envAUTH0_SECRET=<openssl-rand-hex-32>
AUTH0_BASE_URL=http://localhost:3000
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
AUTH0_ISSUER_BASE_URL=https://your-tenant.auth0.comopenssl rand -hex 32app.jsindex.jsrequire('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.AUTH0_SECRET,
baseURL: process.env.AUTH0_BASE_URL,
clientID: process.env.AUTH0_CLIENT_ID,
issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL,
clientSecret: process.env.AUTH0_CLIENT_SECRET
}));
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});/login/logout/callback// 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>
`}
`);
});node app.jshttp://localhost:3000| Mistake | Fix |
|---|---|
| Forgot to add callback URL in Auth0 Dashboard | Add |
| Missing or weak SECRET | Generate secure secret with |
| Setting authRequired: true globally | Set to false and use |
| 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 AUTH0_BASE_URL to match your production domain |
| Not handling logout returnTo | Add your domain to Allowed Logout URLs in Auth0 Dashboard |
auth0-quickstartauth0-migrationauth0-mfaauthRequiredauth0LogoutsecretbaseURLclientIDissuerBaseURLreq.oidc.isAuthenticated()req.oidc.userreq.oidc.accessTokenreq.oidc.idTokenreq.oidc.refreshTokenrequiresAuth()req.oidc.isAuthenticated()req.oidc.user