注销管理路由后反应路由器4

时间:2018-06-13 09:31:46

标签: javascript reactjs meteor react-router react-router-v4

我是新手做出反应,我一直致力于使用Meteor实现基本身份验证过程,我正在使用React Router V4进行路由,下面是我获取基本想法的路由代码:

const routes = (
  <Router history={history}>
    <Switch>
        <Route exact path="/" component={Login}  onEnter={onEnterPublicPage}/>
        <Route exact path='/signup' component={Signup} onEnter={onEnterPublicPage}/>
        <Route exact path='/links' component={Link}/>
          <Route exact path='*' component={NotFound}/>
    </Switch>
   </Router>
);  

以下是我期望的基本身份验证流程:

  

登录屏幕&gt;主屏幕(按退出)&gt;登录屏幕

通过使用以下代码实现此流程:

Tracker.autorun(() => {
 const isAuthenticated= !!Meteor.userId();
 console.log('isAuthenticated', isAuthenticated);
   if (isAuthenticated && isUnAuthenticatedPage){
     history.push('/links');
   }
   else if (!isAuthenticated && isAuthenticatedPage){
     history.push('/');
   }
});

登陆后通过此代码,当我登陆Root,即登录屏幕时,按下浏览器的后退按钮,我再次被重定向到主屏幕,这不应该根据预期的流量发生。我该如何处理这种情况?

我试图在注销后清除浏览器历史记录,但我认为这不是实现此流程的最佳实践。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

使用history.replace()代替history.push()

<强>为什么吗

当您调用history.push界面时,它会在历史堆栈顶部添加新状态 (因此您可以通过单击浏览器的后退按钮进入以前的历史记录状态),而history.replace将使用您定义的新替换当前历史记录状态。