首页 > web前端 > js教程 > 如何在 React Router 4 中实现认证路由?

如何在 React Router 4 中实现认证路由?

Mary-Kate Olsen
发布: 2024-10-22 22:57:03
原创
936 人浏览过

How to Implement Authenticated Routing in React Router 4?

React Router 4 中的经过身份验证的路由

React Router 4 中的经过身份验证的路由需要与以前版本不同的方法。 React Router 4 不再支持带有组件和子属性的嵌套路由,这使得实现经过身份验证的路由变得更具挑战性。

解决方案:使用重定向组件

来实现经过身份验证路由,您可以使用重定向组件。 Redirect 组件根据给定条件将用户重定向到不同的路径。

考虑以下 PrivateRoute 组件:

<code class="javascript">function PrivateRoute ({component: Component, authed, ...rest}) {
  return (
    <Route
      {...rest}
      render={(props) => authed === true
        ? <Component {...props} />
        : <Redirect to={{pathname: '/login', state: {from: props.location}}} />}
    />
  )
}</code>
登录后复制

如果用户经过身份验证(anthed),此组件将呈现指定的组件===真);否则,它会将用户重定向到登录页面。

用法:

现在,您可以在路由中使用 PrivateRoute 组件,如下所示:

<code class="javascript"><Route path='/' exact component={Home} />
<Route path='/login' component={Login} />
<Route path='/register' component={Register} />
<PrivateRoute authed={this.state.authed} path='/dashboard' component={Dashboard} /></code>
登录后复制

在此示例中,仪表板路由的 PrivateRoute 会将未经身份验证的用户重定向到登录页面。

替代解决方案:调度操作

另一种方法,可能不太理想的是在 AuthenticatedRoute 组件的 render 方法中调度一个操作。这可能看起来像:

<code class="javascript">export default class AuthenticatedRoute extends React.Component {
  render() {
    if (!this.props.isLoggedIn) {
      this.props.redirectToLogin()
      return null
    }
    return <Route {...this.props} />
  }
}</code>
登录后复制

当用户未登录时,此方法会触发到登录页面的重定向,但它可能感觉不如使用重定向组件那么优雅。

以上是如何在 React Router 4 中实现认证路由?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板