我正在我的应用程序中实现身份验证,刷新时遇到的问题是状态不持久,因此我被重定向回登录屏幕。如何使用React Hooks检查local storage
中是否有 authToken ,以保持刷新状态。
这是我的受保护路线,用于检查身份验证令牌
<Route
{...rest}
render={
props=>
authTokens ? (
<Component {...props}/>
) : (
<Redirect
to ={
{
pathname: '/login',state: {
from: props.location
}
}
}
/>
这是我的登录页面功能
function Login(props) {
const [isLoggedIn,setLoggedIn] = useState(false);
const [isError,setIsError] = useState(false);
const [firstName,setusername] = useState("");
const [password,setPassword] = useState("");
const { setauthTokens } = useAuth();
function postLogin() {
axios.post("http://10.6.254.22:5000/userinformation/login",{
firstName,password
}).then(result => {
if (result.status === 200) {
console.log('You have been logged in as user: ' +result.data[0].firstName)
setauthTokens(result.data);
setLoggedIn(true);
} else {
setIsError(true);
}
}).catch(e => {
setIsError(true);
});
}
if (isLoggedIn) {
return <Redirect to="/" />;
}
下面是我的钩子,其中包含状态
const [authTokens,setauthTokens] = useState();
const setTokens = (data) => {
localStorage.setItem("authTokens",JSON.stringify(data));
setauthTokens(data);
}
useEffect(()=> {
let jsonToken = localStorage.getItem('authTokens',JSON.stringify(authTokens))
console.log('JSON TOKEN -----' + jsonToken)
setauthTokens(jsonToken)
})
如何在加载时使用local storage
变量设置状态 authTokens ,以便在刷新状态时不会为空,这样我就不会在页面重新加载时注销。还要提及上下文提供程序的设置如下:
<AuthContext.Provider value={{ authTokens,setauthTokens: setTokens}}>
<ProtectedRoute path="/" exact component={ProfileBox}/>
</AuthContext.Provider>