mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:19:35 +01:00
fix(cli): Username im Header nach Session-Restore korrekt anzeigen
This commit is contained in:
parent
169f492b76
commit
bc0043db93
2 changed files with 27 additions and 4 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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<void> {
|
||||
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<string | undefined> {
|
||||
const config = await loadConfig();
|
||||
return config.auth?.username;
|
||||
}
|
||||
|
||||
export async function saveUsername(username: string): Promise<void> {
|
||||
const config = await loadConfig();
|
||||
if (config.auth) {
|
||||
config.auth.username = username;
|
||||
await saveConfig(config);
|
||||
}
|
||||
}
|
||||
|
||||
export async function getStoredApiBaseUrl(): Promise<string | undefined> {
|
||||
const config = await loadConfig();
|
||||
return config.apiBaseUrl;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue