Skip to content

Commit 77eaac1

Browse files
Update auth.middleware.js
1 parent c5551a7 commit 77eaac1

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

src/middleware/auth.middleware.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import jwt from 'jsonwebtoken';
22
import HttpException from '../utils/exceptions/http.exception.js';
33
import User from '../models/user.model.js';
44

5+
const JWT_ALGO = process.env.JWT_ALGO || 'HS256';
6+
57
/**
68
* JWT Authentication Middleware
79
* Verifies JWT token, checks tokenVersion and user state, sets req.user
@@ -23,7 +25,7 @@ const authenticateToken = async (req, res, next) => {
2325

2426
let decoded;
2527
try {
26-
decoded = jwt.verify(token, secret);
28+
decoded = jwt.verify(token, secret, { algorithms: [JWT_ALGO] });
2729
} catch (err) {
2830
if (err.name === 'TokenExpiredError') {
2931
return next(new HttpException(401, 'Token expired. Please login again.'));
@@ -42,12 +44,14 @@ const authenticateToken = async (req, res, next) => {
4244
return next(new HttpException(401, 'Invalid token: user not found or inactive'));
4345
}
4446

45-
const tokenVersion = decoded.tokenVersion || 0;
47+
const tokenVersion = Number(decoded.tokenVersion || 0);
4648
if ((user.tokenVersion || 0) !== tokenVersion) {
4749
return next(new HttpException(401, 'Token revoked. Please login again.'));
4850
}
4951

50-
req.user = decoded;
52+
// normalize req.user for downstream handlers
53+
req.user = { userId, tokenVersion, ...decoded };
54+
5155
return next();
5256
} catch (error) {
5357
console.error('Auth middleware error:', error);
@@ -76,7 +80,7 @@ const optionalAuth = async (req, res, next) => {
7680
}
7781

7882
try {
79-
const decoded = jwt.verify(token, secret);
83+
const decoded = jwt.verify(token, secret, { algorithms: [JWT_ALGO] });
8084
const userId = decoded.userId || decoded.id || decoded.sub;
8185
if (!userId) {
8286
req.user = null;
@@ -87,13 +91,12 @@ const optionalAuth = async (req, res, next) => {
8791
req.user = null;
8892
return next();
8993
}
90-
if ((user.tokenVersion || 0) !== (decoded.tokenVersion || 0)) {
94+
if ((user.tokenVersion || 0) !== (Number(decoded.tokenVersion) || 0)) {
9195
req.user = null;
9296
return next();
9397
}
94-
req.user = decoded;
98+
req.user = { userId, tokenVersion: Number(decoded.tokenVersion || 0), ...decoded };
9599
} catch {
96-
// invalid or expired token -> treat as unauthenticated
97100
req.user = null;
98101
}
99102
return next();

0 commit comments

Comments
 (0)