diff --git a/frontend/apps/cli/src/state/auth-context.tsx b/frontend/apps/cli/src/state/auth-context.tsx index f3106da..22b5c16 100644 --- a/frontend/apps/cli/src/state/auth-context.tsx +++ b/frontend/apps/cli/src/state/auth-context.tsx @@ -1,6 +1,6 @@ import React, { createContext, useCallback, useContext, useEffect, useReducer } from 'react'; import { RefreshTokenExpiredError } from '@effigenix/api-client'; -import { tokenStorage } from '../utils/token-storage.js'; +import { tokenStorage, getStoredUsername, saveUsername } from '../utils/token-storage.js'; import { client } from '../utils/api-client.js'; export interface AuthUser { @@ -70,17 +70,19 @@ export function AuthProvider({ children, onLogout }: AuthProviderProps) { const refreshToken = await tokenStorage.getRefreshToken(); if (token && refreshToken) { // Token existiert und ist noch gültig - dispatch({ type: 'SET_USER', user: { username: 'Eingeloggt' } }); + const username = await getStoredUsername() ?? '?'; + dispatch({ type: 'SET_USER', user: { username } }); } else if (refreshToken) { // Access Token abgelaufen, aber Refresh Token vorhanden → Refresh versuchen try { + const storedUsername = await getStoredUsername(); const refreshed = await client.auth.refresh({ refreshToken }); await tokenStorage.saveTokens( refreshed.accessToken, refreshed.refreshToken, refreshed.expiresAt, ); - dispatch({ type: 'SET_USER', user: { username: 'Eingeloggt' } }); + dispatch({ type: 'SET_USER', user: { username: storedUsername ?? '?' } }); } catch { await tokenStorage.clearTokens(); dispatch({ type: 'LOGOUT' }); @@ -100,6 +102,7 @@ export function AuthProvider({ children, onLogout }: AuthProviderProps) { try { const response = await client.auth.login({ username, password }); await tokenStorage.saveTokens(response.accessToken, response.refreshToken, response.expiresAt); + await saveUsername(username); dispatch({ type: 'SET_USER', user: { username } }); return true; } catch (err) { diff --git a/frontend/apps/cli/src/utils/token-storage.ts b/frontend/apps/cli/src/utils/token-storage.ts index bd34de8..095cce1 100644 --- a/frontend/apps/cli/src/utils/token-storage.ts +++ b/frontend/apps/cli/src/utils/token-storage.ts @@ -12,6 +12,7 @@ interface StoredAuth { accessToken: string; refreshToken: string; expiresAt: string; + username?: string; } interface StoredConfig { @@ -59,7 +60,13 @@ export const tokenStorage: TokenProvider = { async saveTokens(accessToken: string, refreshToken: string, expiresAt: string): Promise { const config = await loadConfig(); - config.auth = { accessToken, refreshToken, expiresAt }; + const existing = config.auth; + config.auth = { + accessToken, + refreshToken, + expiresAt, + ...(existing?.username !== undefined ? { username: existing.username } : {}), + }; await saveConfig(config); }, @@ -70,6 +77,19 @@ export const tokenStorage: TokenProvider = { }, }; +export async function getStoredUsername(): Promise { + const config = await loadConfig(); + return config.auth?.username; +} + +export async function saveUsername(username: string): Promise { + const config = await loadConfig(); + if (config.auth) { + config.auth.username = username; + await saveConfig(config); + } +} + export async function getStoredApiBaseUrl(): Promise { const config = await loadConfig(); return config.apiBaseUrl;