Как создать выход при истечении срока действия токена - PullRequest
0 голосов
/ 22 марта 2019

Может кто-нибудь помочь мне решить эту проблему? Я не знаю, как реализовать сеанс с истекшим сроком действия в моем приложении реакции.

У меня есть данные json с expires_in: 86400, что мне нужно сделать, чтобы реализовать это в моем приложении, когда истек срок действия для выхода из системы.

Я использую реагировать. JS и редукс.

Действие:

export const signin = obj => {
  return dispatch => {
    let data = {
      method: "post",
      url: "/oauth/token",
      data: {
        grant_type: "password",
        client_id: CLIENT_ID,
        client_secret: CLIENT_SECRET,
        username: obj.email,
        password: obj.password
      }
    };
    return API(data)
      .then(res => {
        window.localStorage.setItem("access_token", res.data.access_token);
        console.log('uuuuuuuuuu', res)
        dispatch({
          type: AUTH.LOGGED_IN,
          payload: {
            access_token: res.data.access_token,
            expired_in: res.data.expires_in
          }
        });
      })
      .catch(err => {
        throw err;
      });
  };
};

Ответы [ 3 ]

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

Вы не должны хранить оставшееся время до истечения, но текущее время + оставшееся время. В противном случае вы не сможете узнать, когда это произошло.

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

Вы можете просто достичь этого, используя функцию setTimeout, чтобы активировать функцию выхода из системы. Приведенный ниже код основан на предположении, что expires_in является относительным временем, а не абсолютным временем.

    window.localStorage.setItem("access_token", res.data.access_token);
    setTimeout(logoutFunction, response.data.expires_in)
    console.log('uuuuuuuuuu', res)
    dispatch({
      type: AUTH.LOGGED_IN,
      payload: {
        access_token: res.data.access_token,
        expired_in: res.data.expires_in
      }
    });

и ваш logoutFunction будет выглядеть примерно так:

function logOutFunction() {
   window.localStorage.removeItem("access_token");
   // your redux dispatch and probably a redirection logic to go to a proper UX page
}

Я ошибочно сказал в комментариях использовать setInterval. Я предполагаю, что это будет однократное выполнение, лучше использовать setTimeout.

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

Из вашего кода я нашел.вы использовали window.localStorage.setItem("access_token", res.data.access_token); Но вам на самом деле нужен файл cookie и установите срок действия ответа.Затем вы должны проверить, существует ли cookie в родительском компоненте.если он не существует (просрочен), вы можете перенаправить на страницу входа в систему.

Для принудительного выхода из системы вы можете просто заставить файл cookie истечь.;)

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