Fix jwt-token

This commit is contained in:
2025-09-19 08:14:41 +02:00
parent f98fd04191
commit 3f1b50871a
5 changed files with 343 additions and 113 deletions

View File

@@ -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);
}
}