mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 13:49:36 +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 React, { createContext, useCallback, useContext, useEffect, useReducer } from 'react';
|
||||||
import { RefreshTokenExpiredError } from '@effigenix/api-client';
|
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';
|
import { client } from '../utils/api-client.js';
|
||||||
|
|
||||||
export interface AuthUser {
|
export interface AuthUser {
|
||||||
|
|
@ -70,17 +70,19 @@ export function AuthProvider({ children, onLogout }: AuthProviderProps) {
|
||||||
const refreshToken = await tokenStorage.getRefreshToken();
|
const refreshToken = await tokenStorage.getRefreshToken();
|
||||||
if (token && refreshToken) {
|
if (token && refreshToken) {
|
||||||
// Token existiert und ist noch gültig
|
// 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) {
|
} else if (refreshToken) {
|
||||||
// Access Token abgelaufen, aber Refresh Token vorhanden → Refresh versuchen
|
// Access Token abgelaufen, aber Refresh Token vorhanden → Refresh versuchen
|
||||||
try {
|
try {
|
||||||
|
const storedUsername = await getStoredUsername();
|
||||||
const refreshed = await client.auth.refresh({ refreshToken });
|
const refreshed = await client.auth.refresh({ refreshToken });
|
||||||
await tokenStorage.saveTokens(
|
await tokenStorage.saveTokens(
|
||||||
refreshed.accessToken,
|
refreshed.accessToken,
|
||||||
refreshed.refreshToken,
|
refreshed.refreshToken,
|
||||||
refreshed.expiresAt,
|
refreshed.expiresAt,
|
||||||
);
|
);
|
||||||
dispatch({ type: 'SET_USER', user: { username: 'Eingeloggt' } });
|
dispatch({ type: 'SET_USER', user: { username: storedUsername ?? '?' } });
|
||||||
} catch {
|
} catch {
|
||||||
await tokenStorage.clearTokens();
|
await tokenStorage.clearTokens();
|
||||||
dispatch({ type: 'LOGOUT' });
|
dispatch({ type: 'LOGOUT' });
|
||||||
|
|
@ -100,6 +102,7 @@ export function AuthProvider({ children, onLogout }: AuthProviderProps) {
|
||||||
try {
|
try {
|
||||||
const response = await client.auth.login({ username, password });
|
const response = await client.auth.login({ username, password });
|
||||||
await tokenStorage.saveTokens(response.accessToken, response.refreshToken, response.expiresAt);
|
await tokenStorage.saveTokens(response.accessToken, response.refreshToken, response.expiresAt);
|
||||||
|
await saveUsername(username);
|
||||||
dispatch({ type: 'SET_USER', user: { username } });
|
dispatch({ type: 'SET_USER', user: { username } });
|
||||||
return true;
|
return true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ interface StoredAuth {
|
||||||
accessToken: string;
|
accessToken: string;
|
||||||
refreshToken: string;
|
refreshToken: string;
|
||||||
expiresAt: string;
|
expiresAt: string;
|
||||||
|
username?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface StoredConfig {
|
interface StoredConfig {
|
||||||
|
|
@ -59,7 +60,13 @@ export const tokenStorage: TokenProvider = {
|
||||||
|
|
||||||
async saveTokens(accessToken: string, refreshToken: string, expiresAt: string): Promise<void> {
|
async saveTokens(accessToken: string, refreshToken: string, expiresAt: string): Promise<void> {
|
||||||
const config = await loadConfig();
|
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);
|
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> {
|
export async function getStoredApiBaseUrl(): Promise<string | undefined> {
|
||||||
const config = await loadConfig();
|
const config = await loadConfig();
|
||||||
return config.apiBaseUrl;
|
return config.apiBaseUrl;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue