Created the LoginContext.jsx

This commit is contained in:
2022-12-27 15:26:06 +01:00
parent 1e30b7fdc8
commit 5a4fe66e49

View File

@ -0,0 +1,41 @@
import React, {createContext, useEffect, useState} from "react";
import {request} from "@/common/utils/RequestUtil";
import Login from "@/pages/Login";
export const LoginContext = createContext({});
export const LoginProvider = (props) => {
const [token, setToken] = useState(localStorage.getItem("token") || null);
const [renderPage, setRenderPage] = useState(0);
const checkLogin = () => {
request("/info/status").then(res => {
if (res.status === 401 || res.status === 400) throw 1;
if (!res.ok) throw 2;
}).then(() => setRenderPage(1)).catch((e) => {
if (e === 2) return;
setRenderPage(2);
setToken(null);
});
}
const tokenUpdate = () => {
if (token === null) {
localStorage.removeItem("token");
setRenderPage(2);
return;
}
localStorage.setItem("token", token);
checkLogin();
}
useEffect(tokenUpdate, [token]);
return (
<LoginContext.Provider value={setToken}>
{renderPage === 2 && <Login/>}
{renderPage === 1 && props.children}
</LoginContext.Provider>
)
}