kickstart-express
Version:
A powerful CLI tool to quickly scaffold Express.js projects with modern tooling and best practices
43 lines (35 loc) • 1.27 kB
text/typescript
import jwt from 'jsonwebtoken';
import { Request, Response, NextFunction } from 'express';
interface AuthenticatedRequest extends Request {
user?: any;
}
/**
* JWT Authentication Middleware
* Validates JWT tokens and attaches user information to the request
*/
const authMiddleware = (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
try {
// Get token from Authorization header
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({
error: 'Access denied. No token provided or invalid format.'
});
}
const token = authHeader.substring(7); // Remove 'Bearer ' prefix
// Verify token
const decoded = jwt.verify(token, process.env.JWT_SECRET as string);
// Attach user information to request
req.user = decoded;
next();
} catch (error: any) {
if (error.name === 'TokenExpiredError') {
return res.status(401).json({ error: 'Token has expired.' });
}
if (error.name === 'JsonWebTokenError') {
return res.status(401).json({ error: 'Invalid token.' });
}
return res.status(500).json({ error: 'Token verification failed.' });
}
};
export default authMiddleware;