File size: 1,087 Bytes
9282e59 cdb451a 9282e59 cdb451a 9282e59 cdb451a 9282e59 cdb451a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import { useState, useCallback } from 'react'
import { AuthContext } from './AuthContext.js'
const STORAGE_KEY = 'pa_auth'
function loadSession() {
try {
const raw = sessionStorage.getItem(STORAGE_KEY)
return raw ? JSON.parse(raw) : null
} catch {
return null
}
}
export default function AuthProvider({ children }) {
const [session, setSession] = useState(loadSession)
const login = useCallback((accessToken, user) => {
const next = { accessToken, user }
setSession(next)
try {
sessionStorage.setItem(STORAGE_KEY, JSON.stringify(next))
} catch {
/* storage unavailable — keep in memory only */
}
}, [])
const logout = useCallback(() => {
setSession(null)
try {
sessionStorage.removeItem(STORAGE_KEY)
} catch {
/* ignore */
}
}, [])
const value = {
accessToken: session?.accessToken ?? null,
user: session?.user ?? null,
isAuthenticated: Boolean(session?.accessToken),
login,
logout,
}
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>
}
|