create-tin
Version:
Scaffold a TypeScript or JavaScript Express boilerplate
44 lines (38 loc) • 1.53 kB
text/typescript
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;