我是新手做出反应,我一直致力于使用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,即登录屏幕时,按下浏览器的后退按钮,我再次被重定向到主屏幕,这不应该根据预期的流量发生。我该如何处理这种情况?
我试图在注销后清除浏览器历史记录,但我认为这不是实现此流程的最佳实践。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
使用history.replace()
代替history.push()
<强>为什么吗
当您调用history.push界面时,它会在历史堆栈顶部添加新状态 (因此您可以通过单击浏览器的后退按钮进入以前的历史记录状态),而history.replace将使用您定义的新替换当前历史记录状态。