mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 15:06:20 +00:00
Update secure login flow and login view
This commit is contained in:
@@ -2,7 +2,7 @@ export const GetLocalStorage = <T>(key: string) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
JSON.parse(window.localStorage.getItem(key)) as T ?? null;
|
||||
return JSON.parse(window.localStorage.getItem(key)) as T ?? null;
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
export interface RememberLoginData
|
||||
{
|
||||
token?: string;
|
||||
ssoTicket?: string;
|
||||
expiresAt: number;
|
||||
username?: string;
|
||||
}
|
||||
|
||||
const REMEMBER_LOGIN_KEY = 'nitro.auth.remember';
|
||||
const DEFAULT_REMEMBER_SECONDS = 30 * 24 * 60 * 60;
|
||||
|
||||
export const GetRememberLogin = (): RememberLoginData | null =>
|
||||
{
|
||||
try
|
||||
{
|
||||
const data = JSON.parse(window.localStorage.getItem(REMEMBER_LOGIN_KEY) || 'null') as RememberLoginData | null;
|
||||
|
||||
if(!data?.token?.length && !data?.ssoTicket?.length) return null;
|
||||
if(data.expiresAt && ((data.expiresAt * 1000) <= Date.now()))
|
||||
{
|
||||
ClearRememberLogin();
|
||||
return null;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
export const SetRememberLogin = (data: RememberLoginData): void =>
|
||||
{
|
||||
if(!data?.token?.length && !data?.ssoTicket?.length) return;
|
||||
|
||||
try { window.localStorage.setItem(REMEMBER_LOGIN_KEY, JSON.stringify(data)); }
|
||||
catch {}
|
||||
};
|
||||
|
||||
export const ClearRememberLogin = (): void =>
|
||||
{
|
||||
try { window.localStorage.removeItem(REMEMBER_LOGIN_KEY); }
|
||||
catch {}
|
||||
};
|
||||
|
||||
export const StoreRememberLoginFromPayload = (payload: Record<string, unknown>, username?: string, ssoTicket?: string): void =>
|
||||
{
|
||||
const token = typeof payload.rememberToken === 'string' ? payload.rememberToken : '';
|
||||
const rawExpiresAt = payload.rememberExpiresAt;
|
||||
const parsedExpiresAt = typeof rawExpiresAt === 'number' ? rawExpiresAt : Number(rawExpiresAt || 0);
|
||||
const expiresAt = (Number.isFinite(parsedExpiresAt) && parsedExpiresAt > 0)
|
||||
? parsedExpiresAt
|
||||
: Math.floor(Date.now() / 1000) + DEFAULT_REMEMBER_SECONDS;
|
||||
|
||||
if(!token.length && !ssoTicket?.length) return;
|
||||
|
||||
SetRememberLogin({ token: token || undefined, ssoTicket: ssoTicket || undefined, expiresAt, username });
|
||||
};
|
||||
@@ -14,6 +14,7 @@ export * from './PlaySound';
|
||||
export * from './PrefixUtils';
|
||||
export * from './ProductImageUtility';
|
||||
export * from './Randomizer';
|
||||
export * from './RememberLogin';
|
||||
export * from './RoomChatFormatter';
|
||||
export * from './SanitizeHtml';
|
||||
export * from './SetLocalStorage';
|
||||
|
||||
Reference in New Issue
Block a user