Найденный маршрутизатор (для Relay Modern) Защищенный маршрут авторизации
Я пытаюсь создать защищенный маршрут, который будет перенаправлять на /login
когда пользователь не авторизован с использованием Found Router для Relay Modern на основе примера, приведенного React Router:
const PrivateRoute = ({ component: Component, ...rest }) => {
return (<Route {...rest} render={props => {
if (!props) return
if (Component && props && props.viewer) {
return (<Component {...props} />)
} else {
throw new RedirectException('/login')
}
}}
/>)
}
Я заменяю fakeAuth реальной логикой входа в систему, но остальное тоже самое. Маршрут просто не рендерится.
Найденный Маршрутизатор, кажется, облегчает примеры вокруг этой специфической проблемы. Есть идеи?
1 ответ
В итоге я разделил свой логин и аутентифицированные маршруты:
export default makeRouteConfig(
<Route>
<LoginRoute exact path='/login' Component={Login} query={LoginQuery} />
<PrivateRoute path='/' Component={App} query={AppQuery}>
</Route>
)
И продление маршрута для LoginRoute
как это:
export class LoginRoute extends Route {
render({ Component, props }) {
if (!props) return undefined
if (Component && props && props.viewer) {
throw new RedirectException('/')
}
return (<Component {...props} />)
}
}
И PrivateRoute
выглядит примерно так же, но с разными перенаправлениями в том случае, если нет зрителя.
Это работает довольно хорошо.
У Джимми Цзя, создателя проекта, были и другие предложения, которые я в итоге не использовал, но может быть полезен для любых будущих читателей. Смотрите мой закрытый вопрос здесь.