27 lines
796 B
TypeScript
27 lines
796 B
TypeScript
export interface PlatformJwtClaims {
|
|
user_id?: string | number
|
|
username?: string
|
|
app_code?: string
|
|
roles?: string[]
|
|
permissions?: string[]
|
|
tenant_id?: string | number
|
|
membership_id?: string | number
|
|
exp?: number
|
|
}
|
|
|
|
function decodeBase64Url(value: string): string {
|
|
const normalized = value.replace(/-/g, '+').replace(/_/g, '/')
|
|
const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')
|
|
return atob(padded)
|
|
}
|
|
|
|
export function decodeJwtClaims(token: string): PlatformJwtClaims {
|
|
const payload = token.split('.')[1]
|
|
if (!payload) throw new Error('登录响应中的 accessToken 格式无效')
|
|
try {
|
|
return JSON.parse(decodeBase64Url(payload)) as PlatformJwtClaims
|
|
} catch {
|
|
throw new Error('登录响应中的 accessToken 无法解析')
|
|
}
|
|
}
|