【发布时间】:2020-10-07 02:51:44
【问题描述】:
所以我想在令牌过期时使用刷新令牌更新访问令牌,这就是我的令牌拦截器的样子:
intercept(req: HttpRequest<any>, next: HttpHandler) {
let authservice = this.injector.get(AuthService)
let tokenreq = req.clone({
setHeaders: {
Authorization: `Bearer ${authservice.setToken()}`
}
})
return next.handle(tokenreq).pipe(
catchError((error) => {
if (error.error.message == 'The incoming token has expired') {
authservice.renewToken()
let tokenreq = req.clone({
setHeaders: {
Authorization: `Bearer ${authservice.setToken()}`
}
})
return next.handle(tokenreq)
}
else return throwError(error)
})
);
}
}
问题是在我收到过期令牌消息后authservice.renewToken()
和authservice.setToken() 被同时调用,所以再次设置了过期的令牌。
另一个问题是,如果用户使用 cookie 中过期的令牌再次打开应用程序,所有GET 方法都会抛出错误并多次请求新令牌。如何处理过期令牌错误?
【问题讨论】:
-
Renewtoken 和 settoken 是同步方法吧?
-
我想是的。我还没有声明它们是异步的
-
你能显示
renewToken的代码吗? -
renewToken 方法到底是做什么的?
标签: angular typescript jwt jwt-auth refresh-token