javascript - 检查是否登录 - React Router App ES6

标签 javascript authentication reactjs ecmascript-6 react-router

我正在使用 react-router (v2.8.1) 和 ES6 语法 编写一个 React.js 应用程序 (v15.3)。我无法获取路由器代码来拦截页面之间的所有转换以检查用户是否需要先登录。

我的顶级渲染方法非常简单(应用程序也很简单):

 render()
   {
      return (
         <Router history={hashHistory}>
            <Route path="/" component={AppMain}>
               <Route path="login" component={Login}/>
               <Route path="logout" component={Logout}/>
               <Route path="subject" component={SubjectPanel}/>
               <Route path="all" component={NotesPanel}/>
            </Route>
         </Router>
      );
   }

网络上的所有示例都使用 ES5 代码或旧版本的 react-router(早于版本 2),我对 mixins(已弃用)和 willTransitionTo(从未被调用)的各种尝试都失败了。

如何设置全局“拦截器功能”以强制用户在登陆他们请求的页面之前进行身份验证?

最佳答案

每个路由都有一个 onEnter 钩子(Hook),它在路由转换发生之前被调用。使用自定义 requireAuth 函数处理 onEnter Hook 。

<Route path="/search" component={Search} onEnter={requireAuth} />

示例 requireAuth 如下所示。如果用户通过身份验证,则通过 next() 进行转换。否则将路径名替换为/login 并通过 next() 进行转换。登录也会传递当前路径名,以便在登录完成后,用户将被重定向到最初请求的路径。

function requireAuth(nextState, replace, next) {
  if (!authenticated) {
    replace({
      pathname: "/login",
      state: {nextPathname: nextState.location.pathname}
    });
  }
  next();
}

关于javascript - 检查是否登录 - React Router App ES6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055439/

相关文章:

javascript - 在远程服务器上显示 LESS.js 错误

php - Joomla 3 身份验证以访问 PHP 中的外部应用程序

PHP登录系统

php - 我已经编码的网站的内容管理

reactjs - 如何全局使用键盘快捷键

javascript - 是否可以将 firebase 的图片上传 "uploadTask.on"监听器变成一个 promise?

javascript - 如何为选择列表的自定义指令实现 ng-change?

javascript - 无法通过 document.form.submit 发布跨度值

javascript - 我可以用 React Native 组件做轮播吗?

javascript - 更改 react 钩子(Hook)中的处理程序