diff --git a/src/api/client.ts b/src/api/client.ts index c0b9f7f..a30bfad 100644 --- a/src/api/client.ts +++ b/src/api/client.ts @@ -36,11 +36,18 @@ export class ZinoClient { this.onAuthError = fn; } - setToken(token: string | null): void { + setToken(token: string | null, user?: User | null): void { this.token = token; if (typeof window === 'undefined') return; - if (token) localStorage.setItem(TOKEN_KEY, token); - else localStorage.removeItem(TOKEN_KEY); + if (token) { + localStorage.setItem(TOKEN_KEY, token); + if (user) { + localStorage.setItem(TOKEN_KEY + '_user', JSON.stringify(user)); + } + } else { + localStorage.removeItem(TOKEN_KEY); + localStorage.removeItem(TOKEN_KEY + '_user'); + } } getToken(): string | null { @@ -94,7 +101,7 @@ export class ZinoClient { password, ...(orgId ? { org_id: Number(orgId) } : {}), }); - this.setToken(res.token); + this.setToken(res.token, res.user); return res; } @@ -105,13 +112,27 @@ export class ZinoClient { /** Decode the persisted JWT into a User (no network). */ currentUser(): User | null { if (!this.token) return null; + + // First, try to retrieve the user object stored during login + if (typeof window !== 'undefined') { + try { + const storedUser = localStorage.getItem(TOKEN_KEY + '_user'); + if (storedUser) { + return JSON.parse(storedUser); + } + } catch (e) { + // ignore JSON parse errors + } + } + try { const p = JSON.parse(atob(this.token.split('.')[1])); + console.log('--- JWT PAYLOAD ---', p); return { id: String(p.user_id ?? p.sub ?? ''), org_id: String(p.org_id ?? ''), - name: p.name ?? '', - email: p.email ?? '', + name: p.name ?? p.given_name ?? '', + email: p.email ?? p.preferred_username ?? p.upn ?? p.username ?? '', roles: p.roles ?? [], groups: p.groups ?? [], };