import { Request, Response, NextFunction } from 'express';
interface AuthenticatedRequest extends Request {
userId?: string;
}
function createAuthMiddleware(validator: TokenValidator) {
return async (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
try {
// Extract token from cookies
const token = req.cookies?.hanko;
if (!token) {
return res.status(401).json({ error: 'No session token provided' });
}
const isValid = await validator.validateToken(token);
if (!isValid) {
return res.status(401).json({ error: 'Invalid session token' });
}
// Optionally extract user data from token
// req.userId = extractUserIdFromToken(token);
next();
} catch (error) {
console.error('Authentication middleware error:', error);
res.status(500).json({ error: 'Internal authentication error' });
}
};
}
// Usage
const validator = new HankoTokenValidator(process.env.HANKO_API_URL);
const authMiddleware = createAuthMiddleware(validator);
app.get('/protected', authMiddleware, (req, res) => {
res.json({ message: 'This is a protected route' });
});