Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何限制用户登录时使用登录页面_Reactjs_React Router - Fatal编程技术网

Reactjs 如何限制用户登录时使用登录页面

Reactjs 如何限制用户登录时使用登录页面,reactjs,react-router,Reactjs,React Router,我有一个react应用程序,我想让我的路线私有化,比如当用户未登录时,他们无法看到其他页面,反之亦然 第一个是正常工作时,我没有登录我重定向到登录页面,即“/”这条路线 但当我登录并转到这个“/”url时,我就可以转到登录了 “/”这是我的登录页面 我的代码 export const AuthRoute=({component:Component, ...rest}) => { const token = localStorage.getItem('JWT_Token')

我有一个react应用程序,我想让我的路线私有化,比如当用户未登录时,他们无法看到其他页面,反之亦然

第一个是正常工作时,我没有登录我重定向到登录页面,即“/”这条路线

但当我登录并转到这个“/”url时,我就可以转到登录了

“/”这是我的登录页面

我的代码

  export const  AuthRoute=({component:Component, ...rest}) => {
  const token = localStorage.getItem('JWT_Token') 
    console.log(token)
    return (
       <Route {...rest} render={
         (props => {
           if(token)
           {

             return <Component {...props}/>
           }
           else{
             return <Redirect to={{
               pathname:"/",
               state:{
                 from:props.location
               }
             }} />
           }
         })
       }/>
    )
}
export const AuthRoute=({component:component,…rest})=>{
const-token=localStorage.getItem('JWT\u-token')
console.log(令牌)
返回(
{
如果(令牌)
{
返回
}
否则{
返回
}
})
}/>
)
}
我的路线文件

    <Switch>
    <Route exact path="/" component={ login } />          
    <AuthRoute  path="/welcome" component={ welcome } /> 
    <AuthRoute  path="/profile" component={ profile } />
    </Switch>

我正在使用本地存储检查用户

注销时,我将删除令牌,因此如果没有令牌,我将注销用户


不知道我做错了什么。

您可以在路由上编写一个小包装,以便登录组件在登录时重定向到/welcome

export const LoginRoute=({component:Component, ...rest}) => {
  const token = localStorage.getItem('JWT_Token') 

    return (
       <Route {...rest} render={
         (props => {
           if(token)
           {

             return <Redirect to="/welcome"/>
           }
           else{
             return <Component {...props}/>
           }
         })
       }/>
    );
}

...
<LoginRoute exact path="/" component={ login } />
export const LoginRoute=({component:component,…rest})=>{
const-token=localStorage.getItem('JWT\u-token')
返回(
{
如果(令牌)
{
返回
}
否则{
返回
}
})
}/>
);
}
...

你是说要像我之前对其他路由所做的那样,为登录验证再创建一个组件?是的,这是正确的。或者您可以在登录组件内部实现这个逻辑,那么这是正确的方法吗?因为我是新手,所以我要问,因为我在Vue上工作过,我们有了路由器,然后才有了这些东西