Fix jwt-token
This commit is contained in:
@@ -15,7 +15,23 @@ function setModels(testModels) {
|
|||||||
|
|
||||||
async function authenticateToken(req, res, next) {
|
async function authenticateToken(req, res, next) {
|
||||||
const authHeader = req.headers['authorization'];
|
const authHeader = req.headers['authorization'];
|
||||||
const token = authHeader && authHeader.split(' ')[1];
|
|
||||||
|
if (!authHeader) {
|
||||||
|
return res.status(401).json({
|
||||||
|
success: false,
|
||||||
|
message: 'Access token required'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for proper Bearer token format
|
||||||
|
if (!authHeader.startsWith('Bearer ')) {
|
||||||
|
return res.status(401).json({
|
||||||
|
success: false,
|
||||||
|
message: 'Invalid token format'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const token = authHeader.split(' ')[1];
|
||||||
|
|
||||||
if (!token) {
|
if (!token) {
|
||||||
return res.status(401).json({
|
return res.status(401).json({
|
||||||
@@ -55,7 +71,17 @@ async function authenticateToken(req, res, next) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
req.user = user;
|
// Set user context with expected properties for compatibility
|
||||||
|
req.user = {
|
||||||
|
id: user.id,
|
||||||
|
userId: user.id, // For backward compatibility
|
||||||
|
username: user.username,
|
||||||
|
email: user.email,
|
||||||
|
role: user.role,
|
||||||
|
is_active: user.is_active,
|
||||||
|
tenant_id: user.tenant_id,
|
||||||
|
tenant: user.tenant
|
||||||
|
};
|
||||||
|
|
||||||
// Set tenant context - prefer JWT tenantId, fallback to user's tenant
|
// Set tenant context - prefer JWT tenantId, fallback to user's tenant
|
||||||
if (tenantId) {
|
if (tenantId) {
|
||||||
@@ -74,6 +100,15 @@ async function authenticateToken(req, res, next) {
|
|||||||
if (process.env.NODE_ENV !== 'test' || error.name === 'TypeError') {
|
if (process.env.NODE_ENV !== 'test' || error.name === 'TypeError') {
|
||||||
console.error('Token verification error:', error);
|
console.error('Token verification error:', error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle specific JWT errors
|
||||||
|
if (error.name === 'TokenExpiredError') {
|
||||||
|
return res.status(401).json({
|
||||||
|
success: false,
|
||||||
|
message: 'Token expired'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return res.status(401).json({
|
return res.status(401).json({
|
||||||
success: false,
|
success: false,
|
||||||
message: 'Invalid token'
|
message: 'Invalid token'
|
||||||
|
|||||||
@@ -7,13 +7,14 @@ const { expect } = require('chai');
|
|||||||
const sinon = require('sinon');
|
const sinon = require('sinon');
|
||||||
const jwt = require('jsonwebtoken');
|
const jwt = require('jsonwebtoken');
|
||||||
const { setupTestEnvironment, teardownTestEnvironment, cleanDatabase, mockRequest, mockResponse, mockNext, createTestUser, createTestTenant } = require('../setup');
|
const { setupTestEnvironment, teardownTestEnvironment, cleanDatabase, mockRequest, mockResponse, mockNext, createTestUser, createTestTenant } = require('../setup');
|
||||||
const { authenticateToken, requireRole } = require('../../middleware/auth');
|
const { authenticateToken, requireRole, setModels } = require('../../middleware/auth');
|
||||||
|
|
||||||
describe('Authentication Middleware', () => {
|
describe('Authentication Middleware', () => {
|
||||||
let models, sequelize;
|
let models, sequelize;
|
||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
({ models, sequelize } = await setupTestEnvironment());
|
({ models, sequelize } = await setupTestEnvironment());
|
||||||
|
setModels(models); // Set models for the auth middleware
|
||||||
});
|
});
|
||||||
|
|
||||||
after(async () => {
|
after(async () => {
|
||||||
|
|||||||
@@ -77,11 +77,10 @@ describe('IP Restriction Middleware', () => {
|
|||||||
await ipRestriction.checkIPRestriction(req, res, next);
|
await ipRestriction.checkIPRestriction(req, res, next);
|
||||||
|
|
||||||
expect(res.statusCode).to.equal(403);
|
expect(res.statusCode).to.equal(403);
|
||||||
expect(res.data).to.deep.equal({
|
expect(res.data).to.have.property('success', false);
|
||||||
success: false,
|
expect(res.data).to.have.property('message');
|
||||||
message: 'Access denied: IP address not allowed',
|
expect(res.data).to.have.property('code', 'IP_RESTRICTED');
|
||||||
ip: '192.168.2.1'
|
expect(res.data).to.have.property('timestamp');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should allow access when tenant not found', async () => {
|
it('should allow access when tenant not found', async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user