refactor: switch auth data from localStorage to sessionStorage

Aligns user and permissions storage with the existing sessionStorage-based
token model. Eliminates the dual-write pattern and stale cross-session data.
This commit is contained in:
2026-07-28 02:16:24 +00:00
parent 739253b2e5
commit c4a10c7129
5 changed files with 8 additions and 10 deletions
+1 -1
View File
@@ -33,7 +33,7 @@ const _NavBase = [
function getNav() { function getNav() {
const nav = [..._NavBase]; const nav = [..._NavBase];
const perms = JSON.parse(localStorage.getItem('vw:permissions') || 'null'); const perms = JSON.parse(sessionStorage.getItem('vw:permissions') || 'null');
if (perms && perms.auth === 'rw') { if (perms && perms.auth === 'rw') {
nav.push({ path: '/users', label: 'Users' }); nav.push({ path: '/users', label: 'Users' });
} }
+1 -2
View File
@@ -47,7 +47,7 @@ function clearAuthTokens() {
sessionStorage.removeItem('vw:access_ttl'); sessionStorage.removeItem('vw:access_ttl');
sessionStorage.removeItem('vw:session_id'); sessionStorage.removeItem('vw:session_id');
sessionStorage.removeItem('vw:user'); sessionStorage.removeItem('vw:user');
localStorage.removeItem('vw:user'); sessionStorage.removeItem('vw:user');
if (typeof window.__authRefreshTimer__ !== 'undefined') { if (typeof window.__authRefreshTimer__ !== 'undefined') {
clearTimeout(window.__authRefreshTimer__); clearTimeout(window.__authRefreshTimer__);
window.__authRefreshTimer__ = undefined; window.__authRefreshTimer__ = undefined;
@@ -112,7 +112,6 @@ async function tryRefreshToken() {
} }
if (json.data.user) { if (json.data.user) {
sessionStorage.setItem('vw:user', JSON.stringify(json.data.user)); sessionStorage.setItem('vw:user', JSON.stringify(json.data.user));
localStorage.setItem('vw:user', JSON.stringify(json.data.user));
} }
return true; return true;
} catch { } catch {
+3 -4
View File
@@ -46,10 +46,9 @@ export async function checkSession() {
if (result.ok) { if (result.ok) {
const { user, permissions } = result.data || {}; const { user, permissions } = result.data || {};
if (user) { if (user) {
localStorage.setItem('vw:user', JSON.stringify(user));
sessionStorage.setItem('vw:user', JSON.stringify(user)); sessionStorage.setItem('vw:user', JSON.stringify(user));
if (permissions) { if (permissions) {
localStorage.setItem('vw:permissions', JSON.stringify(permissions)); sessionStorage.setItem('vw:permissions', JSON.stringify(permissions));
} }
return true; return true;
} }
@@ -125,9 +124,9 @@ export function handleLoginSuccess(data, redirectPath = '/dashboard') {
sessionStorage.setItem('vw:session_id', tokens.session_id); sessionStorage.setItem('vw:session_id', tokens.session_id);
} }
if (user) { if (user) {
localStorage.setItem('vw:user', JSON.stringify(user)); sessionStorage.setItem('vw:user', JSON.stringify(user));
if (permissions) { if (permissions) {
localStorage.setItem('vw:permissions', JSON.stringify(permissions)); sessionStorage.setItem('vw:permissions', JSON.stringify(permissions));
} }
} }
scheduleTokenRefresh(); scheduleTokenRefresh();
+1 -1
View File
@@ -92,7 +92,7 @@ function addCredentialModal() {
setModalProcessing(true); setModalProcessing(true);
refreshModals(); refreshModals();
const user = JSON.parse(localStorage.getItem('vw:user') || 'null'); const user = JSON.parse(sessionStorage.getItem('vw:user') || 'null');
const username = user?.username || ''; const username = user?.username || '';
if (!username) { if (!username) {
toast('Username not available', 'error'); toast('Username not available', 'error');
+2 -2
View File
@@ -21,12 +21,12 @@ const SUBSYSTEMS = [
]; ];
function currentUser() { function currentUser() {
const u = JSON.parse(localStorage.getItem('vw:user') || 'null'); const u = JSON.parse(sessionStorage.getItem('vw:user') || 'null');
return u ? u.username : ''; return u ? u.username : '';
} }
function hasAuthAdmin() { function hasAuthAdmin() {
const perms = JSON.parse(localStorage.getItem('vw:permissions') || 'null'); const perms = JSON.parse(sessionStorage.getItem('vw:permissions') || 'null');
return perms && perms.auth === 'rw'; return perms && perms.auth === 'rw';
} }