gpt4 book ai didi

javascript - Angular 6 在 token 更新后重新制作请求之前更改 JWT token

转载 作者:太空狗 更新时间:2023-10-29 19:31:41 24 4
gpt4 key购买 nike

当 token 过期时我正在使用 JWT 身份验证结束(后端检查它)我必须调用刷新 token API 并重新进行最后一次调用失败,因为 token 已过期。
我已经有了拦截器,但我必须在发出请求之前更新身份验证 header ,而且我必须等待 refreshToken 调用。

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const { shouldRetry } = this;
return next.handle(request).pipe(
retryWhen(genericRetryStrategy({
shouldRetry
})),

catchError(err => {
//401 the token is invalid so I have to refresh it
if (err.status === 401) {
this.auth.refreshToken().subscribe(
(apiResult: SessionTokenResponse) => {
this.auth.saveToken(apiResult.token);
},
error => this.auth.logout()
);
request = request.clone({headers: request.headers.set('Authorization', 'Bearer ' + this.auth.getSessionToken)});
return next.handle(request);
}
const error = err.error.message || err.statusText;
return throwError(error);
}),
)
}

重拨电话的方式是否正确?如何等待 refreshToken 结束?谢谢

编辑:我更新了这段似乎有效的代码,我正在测试它

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const { shouldRetry } = this;
return next.handle(request).pipe(
retryWhen(genericRetryStrategy({
shouldRetry
})),

catchError(err => {
//401 the token is invalid so I have to refresh it
if (err.status === 401) {
this.auth.refreshToken().subscribe(
(apiResult: SessionTokenResponse) => {
this.auth.saveToken(apiResult.token);
request = request.clone({ headers: request.headers.set('Authorization', 'Bearer ' + apiResult.token) });
next.handle(request).subscribe();
},
err => this.auth.logout()
);
}else{
const error = err.error.message || err.statusText;
return throwError(error);
}
}),
)

最佳答案

如果我很好地回答了您的问题,您可以使用 async 等待刷新 token 您可以检查当前 token 的访问权限,如果它在 CanActivate 中无效则刷新它 顺便说一句,在每个请求中,它都会检查 token 的访问权限,无需在 interceptor< 中添加额外的代码

在授权服务中

     async isAuthenticated(){
const response = await this.auth.refreshToken().toPromise();
return response;
}

在 CanActivate 中

async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.authenticated= await this.Service.isAuthenticated();
if(this.authenticated) {
this.auth.saveToken(apiResult.token);
return true;
}
else
this.auth.logout();
// navigate to login

}

关于javascript - Angular 6 在 token 更新后重新制作请求之前更改 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com