fix: use base64url (not base64) for session token verification in middleware

The login route encodes the payload with base64url but the middleware was
decoding with base64 — mismatch caused session verification to always fail,
making protected APIs return 401 even after successful login.
This commit is contained in:
Z User committed 2026-10-29 01:06:50 +00:00
1 parent a1c861202a
commit 3dae506a6c
1 file changed
+3 -2
+3 -2
View File
@@ -47,10 +47,11 @@ async function verifySession(token: string | undefined): Promise<boolean> {
const adminPassword = process.env.ADMIN_PASSWORD const adminPassword = process.env.ADMIN_PASSWORD
if (!adminPassword) return false if (!adminPassword) return false
try { try {
// Session token format: base64(payload).hmac // Session token format: base64url(payload).hmac
const [payloadB64, signature] = token.split('.') const [payloadB64, signature] = token.split('.')
if (!payloadB64 || !signature) return false if (!payloadB64 || !signature) return false
const payload = JSON.parse(Buffer.from(payloadB64, 'base64').toString()) // Use base64url to match the encoding in the login route
const payload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString())
if (payload.exp && Date.now() > payload.exp) return false if (payload.exp && Date.now() > payload.exp) return false
// Verify HMAC // Verify HMAC
const crypto = await import('crypto') const crypto = await import('crypto')