Angular HttpInterceptor 拦截方法不适用于第一个请求
Angular HttpInterceptor intercept method does not work with the first request
我正在尝试使用 HttpInterceptor 拦截方法在请求中传递带有 header 的身份验证令牌。我的 _loginSvr 给出了来自 Observable return 的令牌,来自 GetUser() 方法。因此,当 next.handle(request) 被 returned 时,令牌为空。
但是在下一个 http 请求中,它可以工作,因为我猜从上一个请求中已经提取了令牌。那么我如何才能等待 return 请求的句柄,直到我获得令牌。
因为 subscribe
是 'non-blocking' 在订阅方法完成之前到达行 return next.handle(request);
:
您可以在此处使用 mergeMap:
import 'rxjs/add/operator/mergeMap';
...
intercept(req: HttpRequest<any>, next: HttpHandler) {
return this._loginSvr.GetUser().mergeMap(user => {
if (user.access_token) {
req = req.clone({ setHeaders: { Authorization: 'Bearer ' + user.access_token } });
}
return next.handle(req);
}
}
处理您的登录逻辑可以在 mergeMap
功能中实现。
我正在尝试使用 HttpInterceptor 拦截方法在请求中传递带有 header 的身份验证令牌。我的 _loginSvr 给出了来自 Observable return 的令牌,来自 GetUser() 方法。因此,当 next.handle(request) 被 returned 时,令牌为空。 但是在下一个 http 请求中,它可以工作,因为我猜从上一个请求中已经提取了令牌。那么我如何才能等待 return 请求的句柄,直到我获得令牌。
因为 subscribe
是 'non-blocking' 在订阅方法完成之前到达行 return next.handle(request);
:
您可以在此处使用 mergeMap:
import 'rxjs/add/operator/mergeMap';
...
intercept(req: HttpRequest<any>, next: HttpHandler) {
return this._loginSvr.GetUser().mergeMap(user => {
if (user.access_token) {
req = req.clone({ setHeaders: { Authorization: 'Bearer ' + user.access_token } });
}
return next.handle(req);
}
}
处理您的登录逻辑可以在 mergeMap
功能中实现。