fix: adopt orphan session cookie on first SPA load
This commit is contained in:
+33
-1
@@ -1246,7 +1246,7 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
|
|
||||||
checkAuth: async () => {
|
checkAuth: async () => {
|
||||||
const accountStore = useAccountStore.getState();
|
const accountStore = useAccountStore.getState();
|
||||||
const accounts = accountStore.accounts;
|
let accounts = accountStore.accounts;
|
||||||
|
|
||||||
// If the only account is the demo account, re-initialize demo mode
|
// If the only account is the demo account, re-initialize demo mode
|
||||||
// instead of trying to restore a server session (which doesn't exist).
|
// instead of trying to restore a server session (which doesn't exist).
|
||||||
@@ -1255,6 +1255,38 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Orphan-cookie adoption — when no accounts are registered but a
|
||||||
|
// basic-auth session cookie is present (set by /api/auth/impersonate
|
||||||
|
// or by another server-side hand-off), promote it into the account
|
||||||
|
// registry so the normal restoration path picks it up. Without this
|
||||||
|
// the cookies sit unused and the SPA bounces to the login screen.
|
||||||
|
if (accounts.length === 0) {
|
||||||
|
try {
|
||||||
|
const restore = await apiFetch('/api/auth/session', { method: 'PUT' });
|
||||||
|
if (restore.ok) {
|
||||||
|
const data = await restore.json();
|
||||||
|
if (data?.serverUrl && data?.username && data?.password) {
|
||||||
|
accountStore.addAccount({
|
||||||
|
label: data.username,
|
||||||
|
serverUrl: data.serverUrl,
|
||||||
|
username: data.username,
|
||||||
|
authMode: 'basic',
|
||||||
|
rememberMe: true,
|
||||||
|
displayName: data.username,
|
||||||
|
email: data.username,
|
||||||
|
lastLoginAt: Date.now(),
|
||||||
|
isConnected: false,
|
||||||
|
hasError: false,
|
||||||
|
isDefault: true,
|
||||||
|
});
|
||||||
|
accounts = useAccountStore.getState().accounts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
debug.error('Orphan session cookie adoption failed:', err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Multi-account restoration: restore all registered accounts
|
// Multi-account restoration: restore all registered accounts
|
||||||
if (accounts.length > 0) {
|
if (accounts.length > 0) {
|
||||||
// Null out client so the page doesn't fire data-loading effects
|
// Null out client so the page doesn't fire data-loading effects
|
||||||
|
|||||||
Reference in New Issue
Block a user