【发布时间】:2021-03-22 01:18:11
【问题描述】:
我正在使用 Angular + AWS Cognito
我能够登录并需要添加 cognito Bearer 令牌
@Injectable({
providedIn: 'root',
})
export class InterceptorService implements HttpInterceptor {
constructor(public loaderService: LoaderService, private router: Router) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.getToken().pipe(
mergeMap((token) => {
request = request.clone(
{
setHeaders: { Authorization: `Bearer ${token}` }
});
return next.handle(request);
})
);
}
getToken() {
return from(
new Promise((resolve, reject) => {
Auth.currentSession().then((session) => {
if (!session.isValid()) {
resolve(null);
} else {
resolve(session.getIdToken().getJwtToken());
}
}).catch(err => { return resolve(null) });
})
);
}
}
这段代码运行良好,问题是这里如何处理HttpResponse?
我尝试了以下代码,但没有成功,请求没有Bearer token
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
tap(
(event) => {
if (event instanceof HttpResponse) {
if (event.status !== 200) {
console.log('Response', event.status);
}
} else {
return this.getToken().pipe(
mergeMap((token) => {
request = request.clone(
{
setHeaders: { Authorization: `Bearer ${token}` }
});
return next.handle(request);
})
);
}
},
(error) => {
// to handle errors
}
)
}
【问题讨论】:
-
请查看stackblitzDemo Link的链接。希望对您有所帮助。
标签: angular angular-http-interceptors