Created the LoginContext.jsx
This commit is contained in:
41
admin/src/common/contexts/Login/LoginContext.jsx
Normal file
41
admin/src/common/contexts/Login/LoginContext.jsx
Normal 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>
|
||||
)
|
||||
}
|
Reference in New Issue
Block a user