mirror of
https://github.com/gnmyt/LicenseAPI.git
synced 2026-01-12 03:01:47 +00:00
Create common User context
This commit is contained in:
56
dashboard/src/common/contexts/User/UserContext.jsx
Normal file
56
dashboard/src/common/contexts/User/UserContext.jsx
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import {createContext, useEffect, useState} from "react";
|
||||||
|
import Login from "@/states/Login";
|
||||||
|
import Loading from "@/states/Loading";
|
||||||
|
import {postRequest, sessionRequest} from "@/common/utils/RequestUtil.js";
|
||||||
|
import Verify from "@/states/Verify";
|
||||||
|
|
||||||
|
export const UserContext = createContext({});
|
||||||
|
|
||||||
|
export const UserProvider = (props) => {
|
||||||
|
const [user, setUser] = useState({loggedIn: false});
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [sessionToken, setSessionToken] = useState(localStorage.getItem("sessionToken") || null);
|
||||||
|
|
||||||
|
const updateUser = async (token) => {
|
||||||
|
if (!token && !sessionToken) {
|
||||||
|
setUser({loggedIn: false});
|
||||||
|
return setLoading(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
setUser({loggedIn: true, ...await sessionRequest("/user/me", "GET", token || sessionToken)});
|
||||||
|
setLoading(false);
|
||||||
|
} catch (e) {
|
||||||
|
setLoading(false);
|
||||||
|
setUser({loggedIn: false});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const logout = async () => {
|
||||||
|
await postRequest("/auth/logout", {token: sessionToken});
|
||||||
|
localStorage.removeItem("sessionToken");
|
||||||
|
setSessionToken(null);
|
||||||
|
setUser({loggedIn: false});
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setTimeout(updateUser, 1000);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const updateSessionToken = (token) => {
|
||||||
|
localStorage.setItem("sessionToken", token);
|
||||||
|
setSessionToken(token);
|
||||||
|
updateUser(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loading) return (<Loading />);
|
||||||
|
|
||||||
|
if (location.pathname.startsWith("/verify")) return <Verify />;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<UserContext.Provider value={{user, updateUser, logout, updateSessionToken}}>
|
||||||
|
{!loading && !user.loggedIn && <Login />}
|
||||||
|
{!loading && user.loggedIn && props.children}
|
||||||
|
</UserContext.Provider>
|
||||||
|
);
|
||||||
|
}
|
||||||
1
dashboard/src/common/contexts/User/index.js
Normal file
1
dashboard/src/common/contexts/User/index.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export * from "./UserContext";
|
||||||
Reference in New Issue
Block a user