Persist session across page refreshes via sessionStorage

Credentials are saved to sessionStorage on login and restored on mount,
so a page refresh re-authenticates silently. Closing the tab clears them.
Logout explicitly removes them.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Paul Trowbridge 2026-04-05 20:32:46 -04:00
parent 21388b7646
commit 37a6645af0

View File

@ -26,6 +26,8 @@ export default function App() {
async function handleLogin(user, pass) { async function handleLogin(user, pass) {
setCredentials(user, pass) setCredentials(user, pass)
await api.getSources().then(s => { await api.getSources().then(s => {
sessionStorage.setItem('df_user', user)
sessionStorage.setItem('df_pass', pass)
setSources(s) setSources(s)
if (!source && s.length > 0) setSource(s[0].name) if (!source && s.length > 0) setSource(s[0].name)
setAuthed(true) setAuthed(true)
@ -35,20 +37,19 @@ export default function App() {
function handleLogout() { function handleLogout() {
clearCredentials() clearCredentials()
sessionStorage.removeItem('df_user')
sessionStorage.removeItem('df_pass')
setAuthed(false) setAuthed(false)
setLoginUser('') setLoginUser('')
setSources([]) setSources([])
} }
// On mount, restore session if credentials are saved
useEffect(() => { useEffect(() => {
if (!authed) return const user = sessionStorage.getItem('df_user')
api.getSources().then(s => { const pass = sessionStorage.getItem('df_pass')
setSources(s) if (user && pass) handleLogin(user, pass).catch(() => handleLogout())
if (!source && s.length > 0) setSource(s[0].name) }, [])
}).catch(err => {
if (err.status === 401) handleLogout()
})
}, [authed])
useEffect(() => { useEffect(() => {
if (source) localStorage.setItem('selectedSource', source) if (source) localStorage.setItem('selectedSource', source)