setting, session and profile fix
This commit is contained in:
parent
068142ed61
commit
a434af224c
34 changed files with 497 additions and 119 deletions
|
|
@ -6,17 +6,72 @@ export const SESSION_GATED_PATHS = new Set(["/", "/login", "/signup", "/forgot-p
|
|||
|
||||
let sessionRedirecting = false;
|
||||
|
||||
function readShared(key) {
|
||||
try {
|
||||
return localStorage.getItem(key);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function writeShared(key, value) {
|
||||
localStorage.setItem(key, value);
|
||||
sessionStorage.setItem(key, value);
|
||||
}
|
||||
|
||||
function removeShared(key) {
|
||||
localStorage.removeItem(key);
|
||||
sessionStorage.removeItem(key);
|
||||
}
|
||||
|
||||
function syncSharedSession() {
|
||||
const sharedToken = readShared(AUTH_TOKEN_KEY);
|
||||
if (sharedToken) {
|
||||
sessionStorage.setItem(AUTH_TOKEN_KEY, sharedToken);
|
||||
const sharedAccount = readShared(AUTH_ACCOUNT_KEY);
|
||||
if (sharedAccount) sessionStorage.setItem(AUTH_ACCOUNT_KEY, sharedAccount);
|
||||
return;
|
||||
}
|
||||
|
||||
const legacyToken = sessionStorage.getItem(AUTH_TOKEN_KEY);
|
||||
if (!legacyToken) return;
|
||||
localStorage.setItem(AUTH_TOKEN_KEY, legacyToken);
|
||||
const legacyAccount = sessionStorage.getItem(AUTH_ACCOUNT_KEY);
|
||||
if (legacyAccount) localStorage.setItem(AUTH_ACCOUNT_KEY, legacyAccount);
|
||||
}
|
||||
|
||||
syncSharedSession();
|
||||
|
||||
export function getAccessToken() {
|
||||
return sessionStorage.getItem(AUTH_TOKEN_KEY);
|
||||
return readShared(AUTH_TOKEN_KEY) || sessionStorage.getItem(AUTH_TOKEN_KEY);
|
||||
}
|
||||
|
||||
export function isLoggedIn() {
|
||||
return Boolean(getAccessToken());
|
||||
}
|
||||
|
||||
export function saveSession(token, account) {
|
||||
writeShared(AUTH_TOKEN_KEY, token);
|
||||
if (account) writeShared(AUTH_ACCOUNT_KEY, JSON.stringify(account));
|
||||
}
|
||||
|
||||
export function saveStoredAccount(account) {
|
||||
writeShared(AUTH_ACCOUNT_KEY, JSON.stringify(account));
|
||||
}
|
||||
|
||||
export function clearSession() {
|
||||
sessionStorage.removeItem(AUTH_TOKEN_KEY);
|
||||
sessionStorage.removeItem(AUTH_ACCOUNT_KEY);
|
||||
removeShared(AUTH_TOKEN_KEY);
|
||||
removeShared(AUTH_ACCOUNT_KEY);
|
||||
}
|
||||
|
||||
export function onSessionChange(listener) {
|
||||
function handle(event) {
|
||||
if (event.storageArea !== localStorage) return;
|
||||
if (event.key !== AUTH_TOKEN_KEY && event.key !== AUTH_ACCOUNT_KEY && event.key !== null) return;
|
||||
listener(event);
|
||||
}
|
||||
window.addEventListener("storage", handle);
|
||||
return () => window.removeEventListener("storage", handle);
|
||||
}
|
||||
|
||||
export function currentPath() {
|
||||
|
|
@ -46,4 +101,3 @@ export function redirectSessionExpired() {
|
|||
clearSession();
|
||||
window.location.replace("/?session=expired");
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue