在 React Router 4 中管理身份验证
在 React Router 版本 4 中,与以前的版本相比,经过身份验证的路由的实现需要不同的方法。
原始方法
以前,您可以对子组件使用多个 Route 组件,但现在不鼓励这样做。
<Route exact path="/" 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中文网其他相关文章!