首页 > web前端 > js教程 > 正文

如何在 React Router 4 中管理身份验证?

Patricia Arquette
发布: 2024-10-22 23:08:29
原创
304 人浏览过

How to Manage Authentication in React Router 4?

在 React Router 4 中管理身份验证

在 React Router 版本 4 中,与以前的版本相比,经过身份验证的路由的实现需要不同的方法。

原始方法

以前,您可以对子组件使用多个 Route 组件,但现在不鼓励这样做。

<Route exact path="/&quot; component={Index} />
<Route path="/auth" component={UnauthenticatedWrapper}>
    <Route path="/auth/login" component={LoginBotBot} />
</Route>
<Route path="/domains" component={AuthenticatedWrapper}>
    <Route exact path="/domains" component={DomainsIndex} />
</Route>
登录后复制

正确实现

要实现经过身份验证的路由,一种选择是使用扩展 Route 的自定义组件,并在渲染组件之前检查身份验证。

import React, {PropTypes} from "react";
import {Route} from "react-router-dom";

export default class AuthenticatedRoute extends React.Component {
  render() {
    if (!this.props.isLoggedIn) {
      this.props.redirectToLogin()
      return null
    }
    return <Route {...this.props} />
  }
}

AuthenticatedRoute.propTypes = {
  isLoggedIn: PropTypes.bool.isRequired,
  component: PropTypes.element,
  redirectToLogin: PropTypes.func.isRequired
}
登录后复制

替代方法

另一种方法是使用 Redirect 组件,它允许您根据经过身份验证的属性重定向用户。

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

然后您可以在路由中使用 PrivateRoute 组件:

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

以上是如何在 React Router 4 中管理身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!