plugins/aai-stack-express/skills/express-auth/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/the-answerai/alphaagent-team/blob/main/plugins/aai-stack-express/skills/express-auth/SKILL.md -a claude-code --skill express-authInstallation paths:
.claude/skills/express-auth/# Express Auth Skill
Authentication implementation patterns for Express.js applications.
## JWT Authentication
### Token Generation
```typescript
import jwt from 'jsonwebtoken'
interface TokenPayload {
userId: string
email: string
role: string
}
const ACCESS_TOKEN_EXPIRY = '15m'
const REFRESH_TOKEN_EXPIRY = '7d'
function generateAccessToken(payload: TokenPayload): string {
return jwt.sign(payload, process.env.JWT_SECRET!, {
expiresIn: ACCESS_TOKEN_EXPIRY,
})
}
function generateRefreshToken(payload: TokenPayload): string {
return jwt.sign(payload, process.env.JWT_REFRESH_SECRET!, {
expiresIn: REFRESH_TOKEN_EXPIRY,
})
}
function generateTokenPair(user: User) {
const payload = { userId: user.id, email: user.email, role: user.role }
return {
accessToken: generateAccessToken(payload),
refreshToken: generateRefreshToken(payload),
}
}
```
### Token Verification
```typescript
function verifyAccessToken(token: string): TokenPayload {
return jwt.verify(token, process.env.JWT_SECRET!) as TokenPayload
}
function verifyRefreshToken(token: string): TokenPayload {
return jwt.verify(token, process.env.JWT_REFRESH_SECRET!) as TokenPayload
}
```
### Auth Middleware
```typescript
function authenticate(req: Request, res: Response, next: NextFunction) {
const authHeader = req.headers.authorization
if (!authHeader?.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Missing authorization header' })
}
const token = authHeader.slice(7)
try {
const payload = verifyAccessToken(token)
req.user = payload
next()
} catch (error) {
if (error instanceof jwt.TokenExpiredError) {
return res.status(401).json({ error: 'Token expired' })
}
return res.status(401).json({ error: 'Invalid token' })
}
}
```
## Login Flow
### Login Endpoint
```typescript
router.post('/login', async (req, res, next) => {
try {
const { email, password } = req.body
// Find user
const user = await