【发布时间】:2016-12-11 08:33:18
【问题描述】:
我是 react 新手,正在学习如何 react-router 来实现路由。作为我的示例应用程序的一部分,我试图在网站的每条路径上放置一个身份验证器。我正在关注这个例子:https://github.com/reactjs/react-router/blob/master/examples/auth-flow/app.js
这是我的示例代码:
render(
<Router history={browserHistory}>
<Route path="/" component={App} onEnter={requireAuth}>
<IndexRoute component={Home}/>
<Route path="login" component={Login}/>
<Route path="logout" component={Logout}/>
<Route path="about" component={About}/>
<Route path="inbox" component={Inbox}/>
</Route>
</Router>,
document.getElementById("app"));
这就是 requireAuth 的作用:
function requireAuth(nextState, replace) {
if(!auth.isUserLoggedIn()) {
replace({
path: "/login",
state: {nextPathname: nextState.location.pathname}
});
}
}
我所做的与示例所做的区别在于,该示例仅将身份验证功能放在一条路线(仪表板)上,而我想将其放在每条路线上。但是示例停止工作并开始抛出错误
超过最大调用堆栈大小
我认为是正确的,因为 /login 是 / 的子路由,并且因为 requireAuth 正在重定向到子路由,所以它只是尝试再次进行身份验证并不断尝试。我可能在这里错过了一个简单的修复来让它工作,但我无法弄清楚什么是最好的方法。
如何在网站的各个级别启用身份验证?
【问题讨论】:
标签: javascript authentication reactjs react-router