Fix jwt-token

This commit is contained in:
2025-09-15 05:26:34 +02:00
parent ea5ae88019
commit c3c3de43ee
2 changed files with 20 additions and 7 deletions

View File

@@ -1,5 +1,17 @@
const jwt = require('jsonwebtoken'); const jwt = require('jsonwebtoken');
const { User, Tenant } = require('../models');
// Allow models to be injected for testing
let models = null;
try {
models = require('../models');
} catch (error) {
// Models will be injected during testing
}
// Function to set models (used in testing)
function setModels(testModels) {
models = testModels;
}
async function authenticateToken(req, res, next) { async function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization']; const authHeader = req.headers['authorization'];
@@ -27,10 +39,10 @@ async function authenticateToken(req, res, next) {
// For older tokens without tenantId, we need to look up the user's tenant // For older tokens without tenantId, we need to look up the user's tenant
let tenantId = decoded.tenantId; let tenantId = decoded.tenantId;
const user = await User.findByPk(decoded.userId, { const user = await models.User.findByPk(decoded.userId, {
attributes: ['id', 'username', 'email', 'role', 'is_active', 'tenant_id'], attributes: ['id', 'username', 'email', 'role', 'is_active', 'tenant_id'],
include: [{ include: [{
model: Tenant, model: models.Tenant,
as: 'tenant', as: 'tenant',
attributes: ['slug', 'name'] attributes: ['slug', 'name']
}] }]
@@ -89,5 +101,6 @@ function requireRole(roles) {
module.exports = { module.exports = {
authenticateToken, authenticateToken,
requireRole requireRole,
setModels
}; };

View File

@@ -83,9 +83,9 @@ async function setupTestEnvironment() {
id: mainModelsPath id: mainModelsPath
}; };
// Clear cache for middleware modules so they re-import the overridden models // Inject test models into middleware modules
const authMiddlewarePath = path.resolve(__dirname, '../middleware/auth.js'); const authMiddleware = require('../middleware/auth');
delete require.cache[authMiddlewarePath]; authMiddleware.setModels(models);
// Sync database // Sync database
await sequelize.sync({ force: true }); await sequelize.sync({ force: true });