Найден маршрутизатор (для 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 реальной логикой входа, но в остальном то же самое. Маршрут просто не отображается.

Found Router, похоже, не содержит примеров, связанных с этой конкретной проблемой. Любые идеи?


person jordancooperman    schedule 10.02.2018    source источник


Ответы (1)


В итоге я разделил свой логин и аутентифицированные маршруты:

export default makeRouteConfig(
  <Route>
    <LoginRoute exact path='/login' Component={Login} query={LoginQuery} />
    <PrivateRoute path='/' Component={App} query={AppQuery}>
  </Route>
)

И расширение 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 выглядит почти так же, но с другими редиректами в случае отсутствия зрителя.

Это работает довольно хорошо.

У Джимми Джиа, создателя проекта, были и другие предложения, которыми я не воспользовался, но которые могут оказаться полезными для будущих читателей. См. мою закрытую проблему здесь.

person jordancooperman    schedule 12.02.2018