UNPKG

create-tin

Version:

Scaffold a TypeScript or JavaScript Express boilerplate

44 lines (38 loc) 1.53 kB
import jwt from 'jsonwebtoken'; import { Request, Response, NextFunction } from 'express'; import { JwtPayload } from '../types'; import User from '../models/userModel'; const verifyToken = async (req: Request, res: Response, next: NextFunction): Promise<void> => { try { // Get token from Authorization header (Bearer token) const authHeader = req.headers.authorization; if (!authHeader || !authHeader.startsWith('Bearer ')) { res.status(401).json({ success: false, message: "Access denied. No token provided" }); return; } const token = authHeader.split(' ')[1]; // Verify the token const decoded = jwt.verify(token, process.env.JWT_SECRET as string) as JwtPayload; // Fetch the full user from database const user = await User.findById(decoded.id).select('-password'); if (!user) { res.status(401).json({ success: false, message: "User not found" }); return; } // Add user to request object req.user = user; next(); } catch (error: any) { if (error.name === 'JsonWebTokenError') { res.status(401).json({ success: false, message: "Invalid token" }); return; } if (error.name === 'TokenExpiredError') { res.status(401).json({ success: false, message: "Token expired" }); return; } console.error("Auth middleware error:", error); res.status(500).json({ success: false, message: "Authentication error" }); } }; export default verifyToken;