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

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

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

Другие вопросы по тегам