我已经阅读了很多有关刷新令牌的文章,但是我什么也没得到,它们看起来太复杂了。你能在我的样品上解释一下吗。我正在登录,响应时我正在获取具有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,
})
}
})
}
答案 0 :(得分:0)
有两种普遍接受的解决方法:
会根据原始令牌中提供的ttl定期请求刷新的令牌-例如,如果原始令牌的ttl为3600秒,则有一个window.setInterval
3530秒。此方法有效,但是如果由于其他原因更改了auth,则无法处理。
更好:安装一个HTTP拦截器以处理401,并在重新授权后重试该请求。可以在这里找到合理的答案:Axios interceptors and asynchronous login