Authentifizierung in React Router 4 verwalten
In React Router Version 4 erfordert die Implementierung authentifizierter Routen einen anderen Ansatz als in früheren Versionen.
Ursprünglicher Ansatz
Früher konnten Sie mehrere Routenkomponenten mit Kindern verwenden, aber davon wird jetzt abgeraten.
<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>
Richtig Implementierung
Um authentifizierte Routen zu implementieren, besteht eine Möglichkeit darin, eine benutzerdefinierte Komponente zu verwenden, die Route erweitert und vor dem Rendern der Komponente auf Authentifizierung prüft.
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 }
Alternativer Ansatz
Ein anderer Ansatz ist die Verwendung der Redirect-Komponente, mit der Sie Benutzer basierend auf einer authentifizierten Eigenschaft umleiten können.
function PrivateRoute ({component: Component, authed, ...rest}) { return ( <Route {...rest} render={(props) => authed === true ? <Component {...props} /> : <Redirect to={{pathname: '/login', state: {from: props.location}}} />} /> ) }
Sie können dann die PrivateRoute-Komponente in Ihren Routen verwenden:
<Route path='/' exact component={Home} /> <Route path='/login' component={Login} /> <Route path='/register' component={Register} /> <PrivateRoute authed={this.state.authed} path='/dashboard' component={Dashboard} />
Das obige ist der detaillierte Inhalt vonWie verwalte ich die Authentifizierung in React Router 4?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!