Fix jwt-token
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
const jwt = require('jsonwebtoken');
|
||||
const { createErrorResponse, getLanguageFromRequest } = require('../utils/i18n');
|
||||
|
||||
// Allow models to be injected for testing
|
||||
let models = null;
|
||||
@@ -17,27 +18,24 @@ async function authenticateToken(req, res, next) {
|
||||
const authHeader = req.headers['authorization'];
|
||||
|
||||
if (!authHeader) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: 'Access token required'
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'NO_TOKEN');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
// Check for proper Bearer token format
|
||||
if (!authHeader.startsWith('Bearer ')) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: 'Invalid token format'
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'INVALID_TOKEN');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
const token = authHeader.split(' ')[1];
|
||||
|
||||
if (!token) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: 'Access token required'
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'NO_TOKEN');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -65,23 +63,15 @@ async function authenticateToken(req, res, next) {
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: 'User account not found. Please contact support.',
|
||||
error: 'USER_NOT_FOUND',
|
||||
errorCode: 'USER_NOT_FOUND',
|
||||
redirectToLogin: true
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'USER_NOT_FOUND');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
if (!user.is_active) {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
message: 'Your account has been deactivated. Please contact support.',
|
||||
error: 'ACCOUNT_DEACTIVATED',
|
||||
errorCode: 'ACCOUNT_INACTIVE',
|
||||
redirectToLogin: true
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'ACCOUNT_DEACTIVATED');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
// Set user context with expected properties for compatibility
|
||||
@@ -123,39 +113,27 @@ async function authenticateToken(req, res, next) {
|
||||
|
||||
// Handle specific JWT errors with detailed responses
|
||||
if (error.name === 'TokenExpiredError') {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
error: 'TOKEN_EXPIRED',
|
||||
message: 'Token expired',
|
||||
redirectToLogin: true
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'TOKEN_EXPIRED');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
if (error.name === 'JsonWebTokenError') {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
error: 'INVALID_TOKEN',
|
||||
message: 'Invalid token',
|
||||
redirectToLogin: true
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'INVALID_TOKEN');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
if (error.name === 'NotBeforeError') {
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
error: 'TOKEN_NOT_ACTIVE',
|
||||
message: 'Token not active',
|
||||
redirectToLogin: true
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'TOKEN_NOT_ACTIVE');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
|
||||
// Generic authentication error
|
||||
return res.status(401).json({
|
||||
success: false,
|
||||
error: 'AUTHENTICATION_FAILED',
|
||||
message: 'Authentication failed',
|
||||
redirectToLogin: true
|
||||
});
|
||||
const errorResponse = createErrorResponse(req, 401, 'AUTHENTICATION_FAILED');
|
||||
errorResponse.json.redirectToLogin = true;
|
||||
return res.status(errorResponse.status).json(errorResponse.json);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user