React Router после перезагрузки всегда перенаправлен на панель управления - PullRequest
0 голосов
/ 18 марта 2019

У меня одна проблема с реагирующими маршрутизаторами. Это мой класс приложений. Я проверяю свой токен, если он действителен, я перенаправляю на страницу панели инструментов.

class App extends Component {
constructor(props){
    super(props);
    this.checkAuth = this.checkAuth.bind(this);
}

checkAuth(){
    if(localStorage.getItem(ACCESS_TOKEN)){
        getCurrentAccount().then(response => {
            this.props.onLoadCurrentAccount({ account: response, isAuthenticated: true });
            this.props.history.push('/');
        });
    }
}

componentDidMount() {
    this.checkAuth();
}

render() {
    return (
        <div>
            <Switch>
                <Route path='/login' component={Login}/>
                <Route path='/signup' component={Signup} />
                <PrivateRoute authenticated={this.props.account.isAuthenticated} path='/' component={CoreLayout} />
                <Route component={NotFound}/>
            </Switch>
        </div>
    );
}

}

Здесь у меня есть другие маршруты к другим компонентам, если вы авторизованы. Всегда, когда я пытаюсь перезагрузить страницу, я захожу на страницу '/'. Например: я остаюсь на «/ контактах», но когда я перезагружаю страницу, я перехожу на «/». Как я могу это исправить?

class CoreLayout extends Component {
render() {
    return (
        <div>
            <Menu/>
            <Switch>
                <Route exact path='/' component={Dashboard}/>
                <Route path='/contacts' component={Contacts}/>
                <Route path='/assignment' component={Assignment}/>
                <Route path='/tasks' component={Tasks}/>
            </Switch>
        </div>
    );
}

}

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

из-за вашего componentDidMount() метода;

В методе componentDidMount() вы вызываете метод checkAuth(), в котором вы используете

this.props.history.push('/');

, поэтому попробуйте изменить метод checkAuth() согласно вашему требованию.

0 голосов
/ 18 марта 2019

Вам нужно добавить проверку, прежде чем подтолкнуть себя на главную страницу.Если пользователь не прошел проверку подлинности, перенаправьте его на домашнюю страницу

checkAuth(){
    if(localStorage.getItem(ACCESS_TOKEN)){
        getCurrentAccount().then(response => {
            this.props.onLoadCurrentAccount({ account: response, isAuthenticated: true });
            if (IS_NOT_AUTHENTICATED) { // Change your condition for if user is not authenticated
             this.props.history.push('/');
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...