如何在角度中实现刷新令牌?



我正在尝试在我的角度应用程序中实现刷新令牌。我编写了一个 http 拦截器,每当我收到 401 错误时,它都会尝试获取新的访问令牌。我不知道为什么,但这不起作用。我仍然收到 401 回复。

您需要检查响应代码是否为 401,然后请求刷新令牌,并在收到响应处理挂起的请求后等待响应。 使用 HTTP 侦听器刷新令牌

如果需要,请在请求之前生成刷新令牌

export class HttpRequestInterceptor implements HttpInterceptor {
constructor(private router: Router, private service: AuthService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<any> {
return from(this.tokenHandler(request)).pipe(mergeMap((req: HttpRequest<any>) => {
return next.handle(req).pipe(catchError(err => {
if ([401].indexOf(err.status) != -1) {
// auto logout if 401 response returned from api
}                
else {                    
throw err;
}
return EMPTY;
}));
}));
}
private async tokenHandler(request: HttpRequest<any>): Promise<HttpRequest<any>> {
if (request.url.indexOf("REFRESHTOKEN_URL") == -1) {
await this.service.GenerateNewTokenIfNeed(); //Important this function would be async and put httpClient call to ToPromise() and await it. Save token somewhere and get from there to #token# place
}
else {
//RefreshTokenRequest
}
const authReq = request.clone({
setHeaders: {
Authorization: "Bearer #token#"
},
});
return authReq;
}

最新更新