【问题标题】:Angular HttpInterceptor intercept method does not work with the first requestAngular HttpInterceptor 拦截方法不适用于第一个请求
【发布时间】:2018-08-20 10:09:16
【问题描述】:

我正在尝试使用 HttpInterceptor 拦截方法将身份验证令牌与请求中的标头一起传递。我的 _loginSvr 给出了从 GetUser() 方法返回的 Observable 中的令牌。所以当 next.handle(request) 返回时,令牌是空的。 但是在下一个 http 请求中,它可以工作,因为我猜从上一个请求中已经提取了令牌。那么我如何才能等待句柄返回reuqest,直到我得到令牌。

【问题讨论】:

标签: angular interceptor identityserver4 angular-http-interceptors


【解决方案1】:

因为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 功能中实现。

【讨论】:

    猜你喜欢
    • 2021-02-09
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多