【发布时间】:2021-12-28 10:51:18
【问题描述】:
isAuthenticated 始终为空
我正在尝试比较令牌是否过期,但 isAuthenticated 始终为空
import React, {useEffect, useState} from 'react';
import {Navigate} from 'react-router-dom'
import jwtDecode from "jwt-decode";
interface IPrivateRoute {
children: React.ReactNode;
}
const PrivateRoute = ({children}: IPrivateRoute) => {
const [isAuthenticated, setIsAuthenticated] = useState<boolean | null>(null)
useEffect(() => {
let token = localStorage.getItem('token')
if (token) {
let decodedToken:number = jwtDecode<any>(token).exp;
let date:number = new Date().getTime() / 1000;
console.log(decodedToken <= date)
if (decodedToken <= date) {
setIsAuthenticated(true)
} else {
setIsAuthenticated(false)
}
} else {
setIsAuthenticated(false)
}
})
return (
<>
{isAuthenticated ? children : <Navigate to='/login'/>}
</>
);
};
export default PrivateRoute;
【问题讨论】:
-
我认为您的日期检查有问题,您可能混淆了秒数和毫秒数
-
console.log(decodedToken <= date)是否打印布尔值? -
@PierreJanineh,是的
-
您可能只需要在每行末尾添加分号。
-
@PierreJanineh,我认为这不会有帮助)
标签: reactjs react-hooks react-router