fix: decode org context from jwt payload robustly

Add base64 padding before atob when parsing token payload so current_org_id extraction no longer fails intermittently and loops users back to org select.

Made-with: Cursor
This commit is contained in:
2026-04-27 23:55:24 +08:00
parent eb7c8e8831
commit d1caecd9e0
2 changed files with 4 additions and 2 deletions
+2 -1
View File
@@ -46,8 +46,9 @@ const parseCurrentOrgIdFromToken = (token: string | null): string | undefined =>
const tokenParts = token.split('.');
if (tokenParts.length < 2) return undefined;
const payloadRaw = tokenParts[1].replace(/-/g, '+').replace(/_/g, '/');
const payloadRawWithPadding = payloadRaw.padEnd(Math.ceil(payloadRaw.length / 4) * 4, '=');
const payloadJson = decodeURIComponent(
atob(payloadRaw)
atob(payloadRawWithPadding)
.split('')
.map((char) => `%${(`00${char.charCodeAt(0).toString(16)}`).slice(-2)}`)
.join('')
+2 -1
View File
@@ -66,8 +66,9 @@ function parseCurrentOrgIdFromToken(token: string | null): string | undefined {
const tokenParts = token.split('.');
if (tokenParts.length < 2) return undefined;
const payloadRaw = tokenParts[1].replace(/-/g, '+').replace(/_/g, '/');
const payloadRawWithPadding = payloadRaw.padEnd(Math.ceil(payloadRaw.length / 4) * 4, '=');
const payloadJson = decodeURIComponent(
atob(payloadRaw)
atob(payloadRawWithPadding)
.split('')
.map((char) => `%${(`00${char.charCodeAt(0).toString(16)}`).slice(-2)}`)
.join('')