@havemanyquestions

Как выглядит рабочий процесс при использовании Auth0 (jwt)?

Здравствуйте.
Помогите разобраться.
1) Полученные от сервера данные (access token, id token) нельзя сохранять в local storage, туда помещается только флаг залогинен/нет или время жизни токена. Как с этим работать? После логина вся информация хранится в памяти (store), перезагружаю страницу - все теряется, пользователь не залогинен, нужно опять. Как сделать так, чтобы после перезагрузки страницы пользователь оставался на той же странице и залогинен?
2) В Firebase, например, есть метод onAuthStateChange, который можно поместить на главной странице и проверять при каждом действии. Что есть в auth0, как вообще следить за состоянием аутентификации на сервере, как спросить сервер, залогинен ли все еще пользователь?
3) На данный момент от Auth0 мне нужна только возможность логина и назначения ролей и разрешений пользователям. При логине мне должны выдаваться роли и разрешения, которые я сохраню в store и буду проверять наличие ролей при запуске какого-либо необходимого компонента. Фактически, мне нужно забрать эти данные от сервера и следить за состоянием некой сессии н сервере, как это сделать? Ведь когда пользователь проходит аутентификацию, на сервере где-то (бд, ...) происходит отметка того, что пользователь с таким-то ID выполнил вход и эта аутентификация работает столько-то секунд или бессрочная. И каждый раз при запуске приложения я должен делать запрос на сервер, чтобы спросить его о том, а залогинен ли все еще данный пользователь и получить от сервера все те данные, которые были у меня в state, но удалились из-за перезагрузки страницы. Как это сделать?
  • Вопрос задан
  • 567 просмотров
Пригласить эксперта
Ответы на вопрос 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
1. Почему вы решили, что токен нельзя хранить в localStorage? Храните его либо там, либо в cookie и проверяйте наличие при инициализации вашего приложения.

2. Если пользователь присылает невалидный токен или делает запрос по защищенному пути без токена, возвращайте с сервера код 401 и обрабатывайте ошибку на клиенте.
Идеальным вариантом будет использовать один обработчик для всех запросов.
На примере axios:
axios.interceptors.response.use(
  res => res,
  error => {
    if (
      error.response &&
      error.response.status === 401 &&
      error.response.data.message === 'Unauthorized' &&
      isSignedIn
    ) {
      store.dispatch(logout());
    }

    return Promise.reject(error);
  },
);


3. Достаточно при инициализации при наличии токена, например сделать запрос за данными о пользователе. И в зависимости от ответа отрисовывать нужную версию приложения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы