Как обновить токен используя axios? - PullRequest
0 голосов
/ 31 марта 2019

Я прочитал много статей об обновлении токенов, но ничего не получил, они кажутся слишком сложными.Не могли бы вы объяснить мне на моем образце.Я делаю вход, в ответ я получаю объект с access_token, refresh_token и timestamp.После того, как я сохраню оба токена в localStorage.Позже, когда срок действия access_token истекает, я получаю сообщение об ошибке 403 (запрещено).Нет сообщения о том, что токен истек.Не могли бы вы помочь мне с этим

signIn(event) {
    event.preventDefault()
    const formdata = new FormData()
    formdata.append("username", this.state.userLogin.email)
    formdata.append("password", this.state.userLogin.password)
    axios
      .post("http://dev.****************.com/auth/get-token", formdata)
      .then(res => {
        if (res.data) {
          localStorage.setItem("token", res.data.access_token)
          localStorage.setItem("updToken", res.data.update_token)
          this.setState({
            isLoginError: false,
          })
          this.props.history.push("/settings")
        }
      })
      .catch(error => {
        if (error.response.status === 403) {
          this.setState({
            isLoginError: true,
          })
        }
      })
  }

1 Ответ

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

Существует два общепринятых способа сделать это:

  1. периодически запрашивать обновленный токен на основе предоставленного ttl в исходном токене - например, если ваш оригинальный токен имеетскажем, 3600 секунд, затем window.setInterval, который обновляется каждые 3530 секунд.Это работает, но не обрабатывается, если аутентификация изменилась по какой-то другой причине.

  2. Лучше: установите перехватчик http для обработки 401 и повторите запрос после повторной авторизации.Разумный ответ можно найти здесь: Axios перехватчики и асинхронный вход в систему

...