Javascript 响应受保护的路由问题而不在登录页面上注销重定向

Javascript 响应受保护的路由问题而不在登录页面上注销重定向,javascript,reactjs,react-redux,react-router-v4,react-router-dom,Javascript,Reactjs,React Redux,React Router V4,React Router Dom,我正在使用react-protected route jwt Authnetization构建react-login应用程序我的登录组件工作正常,但当我转到仪表板并手动更新url时,它的重定向我登录页面没有注销 const PrivateRoute = ({ component: Component, ...rest }) => { //const auth = useSelector(state => state.auth) let auth =

我正在使用react-protected route jwt Authnetization构建react-login应用程序我的登录组件工作正常,但当我转到仪表板并手动更新url时,它的重定向我登录页面没有注销

  const PrivateRoute = ({ component: Component, ...rest }) => {  
    //const auth = useSelector(state => state.auth)   
    let auth =   localStorage.getItem('token')   
    const [isAuthenticated, setIsAuthenticated] = useState(null) 

    useEffect(() => {
        let token = localStorage.getItem('token')
            if(token){
                let tokenExpiration = jwtDecode(token).exp;
                let dateNow = new Date();
                   console.log(tokenExpiration)
                if(tokenExpiration < dateNow.getTime()/1000){
                    setIsAuthenticated(false)
                }else{
                    setIsAuthenticated(true)
                }
            } else {
               setIsAuthenticated(false)
            }
        // eslint-disable-next-line   }, [auth])

      if(isAuthenticated === null){
        return <></>   }

      return (
        <Route {...rest} render={props =>
          !isAuthenticated ? (
            <Redirect to='/login'/>
          ) : (
          )
        }
      />   ); };
const PrivateRoute=({component:component,…rest})=>{
//const auth=useSelector(state=>state.auth)
让auth=localStorage.getItem('token')
常量[isAuthenticated,setIsAuthenticated]=useState(null)
useffect(()=>{
让token=localStorage.getItem('token')
如果(令牌){
让tokenExpiration=jwtDecode(token).exp;
设dateNow=新日期();
日志(令牌过期)
if(tokenExpiration   ); };

请尝试以下代码。您可以使用专用路由单独文件

privaterout.js
从“React”导入React;
从“react router dom”导入{Route,Redirect};
导出常量PrivateRoute=({component:component,…rest})=>{
返回(
(
localStorage.getItem('token')
? 
: 
)} />
)
}
Route.js
import React,{Component}来自'React';
从“react router dom”导入{Route,Switch};
从“./components/Login/Login”导入登录名
从“/PrivateRoute”导入{PrivateRoute}”;
从“/components/Home/Dashboard”导入仪表板;
从“/Notfound”导入Notfound;
类路由扩展组件{
render(){
返回(
)
}
}
导出默认路径;

当我尝试重新渲染时,您的答案看起来合乎逻辑。React限制渲染数量以防止无限循环。thanx对于您有价值的回答,我如何摆脱这种情况..请帮助我使用专用路径是分开的。我更新了我的最新代码
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
export const PrivateRoute = ({ component: Component, ...rest }) => {

    return (
        <React.Fragment>
        <Route {...rest} render={props => (
            localStorage.getItem('token')
                ? <Component {...props} />
                : <Redirect to={{ pathname: '/login'}} />
        )} />
        </React.Fragment>
    )
}
import React, { Component } from 'react';
import {Route, Switch} from 'react-router-dom';
import Login from './components/Login/Login'
import { PrivateRoute } from "./PrivateRoute";
import Dashboard from "./components/Home/Dashboard";
import Notfound from './Notfound';

class Routes extends Component {

  render() {

    return (
        <React.Fragment>

        <Switch>
            <PrivateRoute exact path="/" component={Dashboard} label="Home"/>
            <Route path="/login" component={Login} />
            <Route path="*" component={Notfound} />
        </Switch>

        </React.Fragment>
    )
  }
}

export default Routes;