2017-03-09 47 views
0

当用户登录到我的应用程序时,他们必须说他们属于哪个俱乐部。一旦他们选择了俱乐部,我将其保存在存储中并附加到标题中。这是我目前拥有的代码:用angular2-jwt在Ionic 2中设置动态头文件

let storage: Storage = new Storage(); 

export function getSubdomain(){ 
    return new Promise((resolve, reject) => { 
    storage.get('club').then(club => { 
     console.log(club); 

     resolve(club) 
    }) 
    }); 
} 

export function getAuthHttp(http: Http, options: RequestOptions) { 
    return new AuthHttp(new AuthConfig({ 
    noJwtError: true, 
    globalHeaders: [{'Content-Type': 'application/json'}, {'x-academy': getSubdomain()}], 
    tokenGetter: (() => storage.get('id_token')) 
}), http, options); 
} 

问题是,头被称为前getSubdomain()函数不返回的名称。我明白这个问题是异步的。如果我将“俱乐部名称”返回,它就可以很好地工作。我该如何解决这个问题?

回答

0

我wansn't能够正常工作的问题出使用Storage所以我只好用localstorage.getItem('club'),因为它是同步功能,它看起来像这样:

export function getAuthHttp(http: Http, options: RequestOptions) { 
    return getSubDomain().then(subDomain => 
    new AuthHttp(new AuthConfig({ 
    noJwtError: true, 
    globalHeaders: [{'Content-Type': 'application/json'}, {'x-academy': localstorage.getItem('club')}], 
    tokenGetter: (() => storage.get('id_token')) 
    }), http, options)); 
} 
0

首先,getSubDomain()可以简化,因为您可以直接返回storage.get('club')结果。

至于你提到你的问题是一个异步的,你可以通过等待承诺创造另外一个,像这样结束前解决它:

export function getAuthHttp(http: Http, options: RequestOptions) { 
    return getSubDomain().then(subDomain => 
     new AuthHttp(new AuthConfig({ 
     noJwtError: true, 
     globalHeaders: [{'Content-Type': 'application/json'}, {'x-academy': subDomain}], 
     tokenGetter: (() => storage.get('id_token')) 
    }), http, options)); 
} 
+0

这不起作用。它发回我this.authHttp.post不是一个函数。我需要对getSubDomain()进行任何更改吗? – ACES

+0

这个错误似乎来自其他地方,因为我给你的函数中没有帖子 – Supamiu

+0

如果硬编码在我的头{{x-academy':'somestring'}}我的authHttp.post请求正常工作。我认为getAuthHttp函数应该返回新的AuthHttp和你建议我不认为它的方式。 – ACES