Angular HttpInterceptor拦截方法不适用于第一个请求

时间:2018-03-12 11:41:37

标签: angular interceptor identityserver4 angular-http-interceptors

我想使用HttpInterceptor拦截方法在请求中传递带有标头的身份验证令牌。我的_loginSvr给出了从GetUser()方法返回的Observable中的标记。因此,当此时返回next.handle(请求)时,令牌为空。 但是在下一个http请求中它可以正常工作,因为我已经猜到了令牌。那么我怎么能等到句柄返回reuqest,直到我得到令牌。

enter image description here

1 个答案:

答案 0 :(得分:2)

由于subscribe为'非阻止',因此在订阅方法完成之前已到达行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 functionallity。

中实现