如何使用axios刷新令牌?

时间:2019-03-31 16:03:47

标签: javascript reactjs axios token

我已经阅读了很多有关刷新令牌的文章,但是我什么也没得到,它们看起来太复杂了。你能在我的样品上解释一下吗。我正在登录,响应时我正在获取具有access_token,refresh_token和时间戳的对象。将两个令牌都保存在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 :(得分:0)

有两种普遍接受的解决方法:

  1. 会根据原始令牌中提供的ttl定期请求刷新的令牌-例如,如果原始令牌的ttl为3600秒,则有一个window.setInterval 3530秒。此方法有效,但是如果由于其他原因更改了auth,则无法处理。

  2. 更好:安装一个HTTP拦截器以处理401,并在重新授权后重试该请求。可以在这里找到合理的答案:Axios interceptors and asynchronous login