有人能给我一个自动刷新accessToken的好逻辑吗?
目前,我有一个OpenAPI生成的类,其中accessToken是所有请求中的一个承诺,在这个承诺中,我检查令牌是否过期,并根据刷新令牌获取新的令牌。
我还有一个AuthContext,用于管理我的身份验证、用户详细信息等(保存到本地存储等)
问题是,我需要以某种方式访问我的AuthContext,并在API类中为它提供新的令牌,或者在令牌无法刷新时注销。
我确实收到了有关以下代码的错误,但这是意料之中的:第一个月
我的访问令牌作为承诺(在API类内部)
accessToken: new Promise<string>(async (resolve, reject) => {
const tokenExpiresAt = Date.parse(model.tokenExpiration);
const {saveAuth, logout} = useAuth() // Here is the problem
// if token is expired, refresh it
if (tokenExpiresAt < Date.now()) {
this.Auth.refresh({accessToken: model.token, refreshToken: model.refreshToken})
.then((response) => {
// save new auth
saveAuth(response.data)
resolve(response.data.token);
})
.catch((error) => {
// error refreshing token, logout
logout()
reject("Token expired");
});
}
resolve(model.token);
})
1条答案
按热度按时间qoefvg9y1#
不久前我遇到了一个类似的问题,是的,你不能在钩子中调用钩子,所以解决这个问题的另一种方法是拦截
axios
响应拦截器。并且可以根据自己的
usecase
实现自己的refreshAccessToken
函数。