2017-03-09 52 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