Как проверить, вошел ли пользователь в систему, а затем перенаправить?

#javascript #html #reactjs #react-redux #react-router

#javascript #HTML #reactjs #реагировать-redux #реагировать-маршрутизатор

Вопрос:

Я перепробовал все ответы, которые смог найти, это мой маршрут:

 const loggedIn = !!localStorage.getItem('token');

const Routes = () => (
    <div>
        <Switch>
            <Route exact path="/" render={() => (
                !loggedIn ? (
                    <Redirect to="/login" />

                ) : (
                    <Redirect to="/welcome" />
                )
            )}/>
</Switch>
    </div>
);

export default Routes;
  

Однако он все еще не работает.. Я получаю сообщение об ошибке в другом контейнере:

menuContainer.js: 10 Неперехваченная ошибка типа: не удается прочитать свойство ‘id’, равное null

 constructor(props) {
        super(props);
        this.state = {
            userId: JSON.parse(localStorage.getItem('logged')).id,
            loginRole: localStorage.getItem('loggedRole')
        }
    };
  

Что я здесь делаю не так?

Спасибо!

РЕДАКТИРОВАТЬ: у меня нет никакого идентификатора, если пользователь не вошел в систему. В этом весь смысл. 🙂 Если пользователь не вошел в систему, он должен перенаправить обратно в /login .

Комментарии:

1. можете ли вы сказать нам, что находится в вашем локальном хранилище?

2. Конечно, когда пользователь зарегистрирован, есть идентификатор зарегистрированного пользователя, когда нет, ключа нет.

3. попробуйте console.log(JSON.parse(localStorage.getItem('logged'))) и проверьте, возвращает ли он null?

4. Routes.js:26 Uncaught TypeError: Cannot read property 'id' of null

5. По умолчанию, если элемент, к которому вы обращаетесь, не существует, он возвращается null . Если я это сделаю, JSON.parse(localStorage.getItem('hello')) он вернется null . Итак, где и когда вы сохраняете элемент token ?

Ответ №1:

сначала вам нужно установить элемент в localStorage

 localStorage.setItem('name', value )
  

Ответ №2:

Я не уверен, как вы устанавливали объект localStorage раньше.

var userobj = { id : 12 }

localStorage.setItem('logged',JSON.stringify(userobj))

затем попробуйте получить это как JSON.parse(localStorage.getItem('logged')).id; //return 12

Вот как это нужно сделать. Если token который вы получаете, имеет идентификатор, вам нужно вручную установить его перед получением 🙂

Комментарии:

1. Но у меня их нет id , если пользователь не вошел в систему. В этом весь смысл. 🙂 Если пользователь не вошел в систему, он должен перенаправить обратно на /login .