imeeting/frontend/src/hooks/useAuth.ts

29 lines
913 B
TypeScript

import { useEffect, useState, useMemo } from "react";
import { UserProfile } from "../types";
export function useAuth() {
const [accessToken, setAccessToken] = useState<string | null>(() => localStorage.getItem("accessToken"));
useEffect(() => {
const handler = () => setAccessToken(localStorage.getItem("accessToken"));
window.addEventListener("storage", handler);
return () => window.removeEventListener("storage", handler);
}, []);
const profile = useMemo<UserProfile | null>(() => {
const data = sessionStorage.getItem("userProfile");
return data ? JSON.parse(data) : null;
}, [accessToken]);
const isAuthed = !!accessToken;
const logout = () => {
localStorage.removeItem("accessToken");
localStorage.removeItem("refreshToken");
sessionStorage.removeItem("userProfile");
setAccessToken(null);
};
return { accessToken, isAuthed, profile, logout };
}