为 Http 拦截器解析课程令牌
Resolve Adal Token for Http Interceptor
我正在尝试编写一个添加授权令牌的 angular (4) 拦截器;
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private _adal: AdalService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const resource = this._adal.GetResourceForEndpoint(req.url);
var token;
this._adal.acquireToken(resource)
.subscribe(function (token) {
token = token;
});
const authReq = req.clone({setHeaders: {Authorization: `Bearer ${token}`}});
return next.handle(authReq);
}
}
我马上就知道这是错误的,token
是以异步方式设置的,因此当设置 headers 时,token
是未定义的。
我的问题是,我该如何进行这项工作? acquireToken
来自 return Observable<string>
的 Adal npm 包。拦截器是 Angular 框架的一部分,并期望 Observable<HttpEvent<any>>
被 returned。
有什么方法可以完成我想做的事情吗?
仅供参考
我之前使用的是 getCachedToken
,它只是 return 一个字符串。在我们开始使用多个端点之前,这一直很好用。 Adal 似乎没有为所有端点缓存令牌。
我正在使用以下 Adal package。
尝试在响应到来后返回 observable:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private _adal: AdalService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this._adal.acquireToken(this._adal.GetResourceForEndpoint(req.url))
.switchMap(function (token) {
return next.handle(req.clone({setHeaders: {Authorization: `Bearer ${token}`}}));
});
}
}
我正在尝试编写一个添加授权令牌的 angular (4) 拦截器;
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private _adal: AdalService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const resource = this._adal.GetResourceForEndpoint(req.url);
var token;
this._adal.acquireToken(resource)
.subscribe(function (token) {
token = token;
});
const authReq = req.clone({setHeaders: {Authorization: `Bearer ${token}`}});
return next.handle(authReq);
}
}
我马上就知道这是错误的,token
是以异步方式设置的,因此当设置 headers 时,token
是未定义的。
我的问题是,我该如何进行这项工作? acquireToken
来自 return Observable<string>
的 Adal npm 包。拦截器是 Angular 框架的一部分,并期望 Observable<HttpEvent<any>>
被 returned。
有什么方法可以完成我想做的事情吗?
仅供参考
我之前使用的是 getCachedToken
,它只是 return 一个字符串。在我们开始使用多个端点之前,这一直很好用。 Adal 似乎没有为所有端点缓存令牌。
我正在使用以下 Adal package。
尝试在响应到来后返回 observable:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private _adal: AdalService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this._adal.acquireToken(this._adal.GetResourceForEndpoint(req.url))
.switchMap(function (token) {
return next.handle(req.clone({setHeaders: {Authorization: `Bearer ${token}`}}));
});
}
}