Merge pull request #264 from the-luap/fix/password-change-redirect-loop
fix: resolve redirect loop after mandatory password change (#263)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const bcrypt = require('bcrypt');
|
const bcrypt = require('bcrypt');
|
||||||
|
const jwt = require('jsonwebtoken');
|
||||||
const { body } = require('express-validator');
|
const { body } = require('express-validator');
|
||||||
const { db, logActivity } = require('../database/db');
|
const { db, logActivity } = require('../database/db');
|
||||||
const { adminAuth } = require('../middleware/auth');
|
const { adminAuth } = require('../middleware/auth');
|
||||||
@@ -7,6 +8,7 @@ const { endSession } = require('../middleware/sessionTimeout');
|
|||||||
const { validatePasswordStrength } = require('../utils/passwordGenerator');
|
const { validatePasswordStrength } = require('../utils/passwordGenerator');
|
||||||
const { handleAsync, validateRequest, successResponse } = require('../utils/routeHelpers');
|
const { handleAsync, validateRequest, successResponse } = require('../utils/routeHelpers');
|
||||||
const { NotFoundError, ConflictError, ValidationError } = require('../utils/errors');
|
const { NotFoundError, ConflictError, ValidationError } = require('../utils/errors');
|
||||||
|
const { setAdminAuthCookie } = require('../utils/tokenUtils');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
// Get admin profile
|
// Get admin profile
|
||||||
@@ -133,6 +135,20 @@ router.post('/change-password', [
|
|||||||
updated_at: now
|
updated_at: now
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Issue a new token so the session remains valid after password_changed_at invalidated the old one
|
||||||
|
const newToken = jwt.sign({
|
||||||
|
id: user.id,
|
||||||
|
username: user.username,
|
||||||
|
type: 'admin',
|
||||||
|
role: user.role_name,
|
||||||
|
loginTime: Date.now()
|
||||||
|
}, process.env.JWT_SECRET, {
|
||||||
|
expiresIn: '24h',
|
||||||
|
issuer: 'picpeak-auth'
|
||||||
|
});
|
||||||
|
|
||||||
|
setAdminAuthCookie(res, newToken);
|
||||||
|
|
||||||
// Log activity
|
// Log activity
|
||||||
await logActivity('password_changed',
|
await logActivity('password_changed',
|
||||||
{ admin_id: userId },
|
{ admin_id: userId },
|
||||||
|
|||||||
Reference in New Issue
Block a user