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

时间:2017-04-12 04:45:38

标签: angular typescript

在我的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();
            });
    }

为myService:

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;
        });
}

1 个答案:

答案 0 :(得分:0)

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

这样的东西
let headers = new Headers({ 'Authorization': 'Bearer ' + this.myService.getAccessToken() });

然后你只需要在令牌到期时捕获getData调用(代码401)上的错误并且只是请求一个新的。