UNPKG

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
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;