Switch session storage from sessionStorage to localStorage

sessionStorage is per-tab — new tabs had no session, so WebSocket
didn't connect and real-time lock/booking sync didn't work.
localStorage shares session across tabs in the same browser.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 18:29:14 +03:00
parent dd9a2a3da9
commit 42dc4518e2

View File

@@ -13,7 +13,7 @@ const AuthContext = createContext<AuthContextValue | null>(null)
export function AuthProvider({ children }: { children: React.ReactNode }) {
const [session, setSession] = useState<AuthSession | null>(() => {
const stored = sessionStorage.getItem('hotelsync-session')
const stored = localStorage.getItem('hotelsync-session')
return stored ? JSON.parse(stored) : null
})
@@ -22,7 +22,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
const { access_token, user } = await api.auth.login(email, password)
const s: AuthSession = { user, token: access_token }
setSession(s)
sessionStorage.setItem('hotelsync-session', JSON.stringify(s))
localStorage.setItem('hotelsync-session', JSON.stringify(s))
return user
} catch (err) {
if (err instanceof ApiError && err.status === 401) return null
@@ -33,7 +33,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
const logout = async () => {
try { await api.auth.logout() } catch { /* ignore */ }
setSession(null)
sessionStorage.removeItem('hotelsync-session')
localStorage.removeItem('hotelsync-session')
}
return (