29 lines
913 B
TypeScript
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 };
|
|
}
|
|
|