После нажатия на / профиль я попадаю на путь / логин. Как автоматически приземлиться после завершения входа в систему / в профиле? - PullRequest
0 голосов
/ 15 марта 2020

Я работаю с реактором. Я не вошел в систему, я нажимаю на ссылку / профиль. Затем я переадресован в / логин (это работает нормально). После успешного входа я приземляюсь дома, а не в / profile

    const PrivateRoute = ({ component: Component, authed, ...rest }) => (
    <Route {...rest} render={props => (
            authed ? 
            (<Component {...props}/>) 
            : 
            (
              <Redirect to={{
                    pathname: '/login',
                    state: { from: props.location }
                }}
              />
            )
        )}
    />
)

render() {
    const loggedIn = this.props.isLoggedIn;

    return(
        <Switch>

        <Route exact path="/" component={ UserPanel } />
        <Route exact path="/confirm" component={ EmailConfirmation } />

        {/* <Route exact path="/admin" component={ AdminPanel } /> */}
        <Route exact path="/login" render={(props) => ( loggedIn
            ? <Redirect to='/' />
            : <Login/>
          )} />

          <PrivateRoute path='/admin' component={AdminPanel} authed = {this.props.admin}/>
        <PrivateRoute path='/createevent' component={CreateEvent} authed = {loggedIn}/>
        <PrivateRoute path='/profile' component={Profile} authed = {loggedIn}/>
        </Switch>

    )
}

1 Ответ

0 голосов
/ 15 марта 2020

В настоящее время кажется, что вы уже установили состояние для Redirect на частном маршруте с помощью:

<Redirect to={{
  pathname: '/login',
  state: { from: props.location }
}}
/>

Теперь вы можете использовать это состояние в компоненте входа для перенаправления пользователя обратно туда, откуда он пришел. Заимствование компонента входа из документов :

function LoginPage() {
  let history = useHistory();
  let location = useLocation();

  let { from } = location.state || { from: { pathname: "/" } };
  let login = () => {
    fakeAuth.authenticate(() => {
      history.replace(from);
    });
  };

  return (
    <div>
      <p>You must log in to view the page at {from.pathname}</p>
      <button onClick={login}>Log in</button>
    </div>
  );
}

Состояние из местоположения извлекается в переменную from или, если она не существует (пользователь пришел на маршрут по собственному желанию при вводе URL-адреса или нажатии кнопки) по умолчанию устанавливается /.

В дальнейшем при успешной аутентификации пользователь перенаправляется на from.

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