Anugalur2 - 将身份验证令牌注入请求标头



在我的 angular 2 应用程序中,我需要通过插入 标头中的标记。我有一个创建请求标头的服务,并且 插入令牌。问题是,检索令牌的方法是异步的。所以在下面的代码中,http get 是在令牌之前执行的 可以插入到标头中。

有没有更好的方法来强制 http get 等到令牌被提取?

法典:

getData(query: Vehicle): Observable<ResultWrapper> {
this.spinnerService.show();
return this.http
.get(`${this.myService.apiEndpoint}/vehicles?name=${query.make}`,
{ headers: this.myService.getHeaders() })
.map(this.extractData)
.catch(this.exceptionService.catchBadResponse)
.finally(() => {
this.spinnerService.hide();
});
}

我的服务:

getHeaders(): any {
// this is call to an asynchronous javascript method
this.config.getToken(function (responseData) {
if (!responseData.error) {
responseData.headers.append('Authorization', "Bearer " + responseData.token);
return responseData.headers;
});
}

你当然可以解决这个问题 - 但也许有更好的方法来实现它。例如,您的身份验证服务(myService)将保留缓存的令牌并将其传递给请求者(例如,getAccessToken()方法将返回localStorage.getItem('auth_token'))。然后你会使用类似的东西

let headers = new Headers({ 'Authorization': 'Bearer ' + this.myService.getAccessToken() });

然后,您只需要在 getData 调用(代码 401)上捕获令牌过期时的错误,然后请求一个新错误。

最新更新