mirror of
https://github.com/shuaiplus/nodewarden.git
synced 2026-08-05 06:50:10 +00:00
fix: keep remembered 2fa token on bad password
This commit is contained in:
@@ -89,6 +89,16 @@ function clearRememberTwoFactorToken(): void {
|
|||||||
localStorage.removeItem(TOTP_REMEMBER_TOKEN_KEY);
|
localStorage.removeItem(TOTP_REMEMBER_TOKEN_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasTwoFactorChallenge(error: TokenError): boolean {
|
||||||
|
const providers = error.TwoFactorProviders ?? error.CustomResponse?.TwoFactorProviders;
|
||||||
|
const providers2 = error.TwoFactorProviders2 ?? error.CustomResponse?.TwoFactorProviders2;
|
||||||
|
if (Array.isArray(providers)) return providers.length > 0;
|
||||||
|
if (providers && typeof providers === 'object') return Object.keys(providers as Record<string, unknown>).length > 0;
|
||||||
|
if (Array.isArray(providers2)) return providers2.length > 0;
|
||||||
|
if (providers2 && typeof providers2 === 'object') return Object.keys(providers2 as Record<string, unknown>).length > 0;
|
||||||
|
return providers != null || providers2 != null;
|
||||||
|
}
|
||||||
|
|
||||||
export function loadSession(): SessionState | null {
|
export function loadSession(): SessionState | null {
|
||||||
try {
|
try {
|
||||||
const raw = localStorage.getItem(SESSION_KEY);
|
const raw = localStorage.getItem(SESSION_KEY);
|
||||||
@@ -282,7 +292,7 @@ export async function loginWithPassword(
|
|||||||
const json = (await parseJson<TokenSuccess & TokenError>(resp)) || {};
|
const json = (await parseJson<TokenSuccess & TokenError>(resp)) || {};
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
saveRememberTwoFactorToken((json as TokenSuccess).TwoFactorToken);
|
saveRememberTwoFactorToken((json as TokenSuccess).TwoFactorToken);
|
||||||
} else if (rememberedToken) {
|
} else if (rememberedToken && hasTwoFactorChallenge(json)) {
|
||||||
clearRememberTwoFactorToken();
|
clearRememberTwoFactorToken();
|
||||||
}
|
}
|
||||||
if (!resp.ok) return json;
|
if (!resp.ok) return json;
|
||||||
|
|||||||
@@ -455,6 +455,11 @@ export interface TokenError {
|
|||||||
error?: string;
|
error?: string;
|
||||||
error_description?: string;
|
error_description?: string;
|
||||||
TwoFactorProviders?: unknown;
|
TwoFactorProviders?: unknown;
|
||||||
|
TwoFactorProviders2?: unknown;
|
||||||
|
CustomResponse?: {
|
||||||
|
TwoFactorProviders?: unknown;
|
||||||
|
TwoFactorProviders2?: unknown;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AccountPasskeyCredential {
|
export interface AccountPasskeyCredential {
|
||||||
|
|||||||
Reference in New Issue
Block a user