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:
Paul Nothaft
2026-04-05 18:34:07 +02:00
committed by GitHub
+16
View File
@@ -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 },