Angular 离子2应用程序未从存储中获取JWT令牌

Angular 离子2应用程序未从存储中获取JWT令牌,angular,ionic2,jwt,Angular,Ionic2,Jwt,我使用的是带有angular2 jwt插件的离子2最终版本。我正在成功记录并接收我保存到存储器中的令牌 this.storage.set('id_token', res.token); 一旦我刷新页面并尝试检查auth.ts头中的授权,我就不会发送令牌。我知道问题出在异步存储上,但我不知道如何解决它。我尝试了很多不同的解决方案 此外,当我将令牌保存在常量中时,它工作得非常好 我的app.module.ts如下所示: ... export function getAuthHttp(http)

我使用的是带有angular2 jwt插件的离子2最终版本。我正在成功记录并接收我保存到存储器中的令牌

this.storage.set('id_token', res.token);
一旦我刷新页面并尝试检查auth.ts头中的授权,我就不会发送令牌。我知道问题出在异步存储上,但我不知道如何解决它。我尝试了很多不同的解决方案

此外,当我将令牌保存在常量中时,它工作得非常好

我的app.module.ts如下所示:

...

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

...

providers: [
   {provide: ErrorHandler, useClass: IonicErrorHandler},
   {provide: AuthHttp, useFactory: getAuthHttp, deps: [Http]}
 ...
]
还有我的作者:

...
@Injectable()
export class Auth {

    serverUrl: string;
    storage: Storage = new Storage();  

    constructor(public http: Http,
          public authHttp: AuthHttp,
          public constantsService: ConstantsService,
    ) {                 
       this.serverUrl = this.constantsService.API_ENDPOINT();

    }

    login(credentials){ 
      let headers = new Headers({'Content-Type': 'application/json', 'x-academy': 'academy' });
      return this.authHttp.post(this.serverUrl+'/login', JSON.stringify(credentials), {headers: headers})
    }
    ....
    public checkAuthentication(){
       return this.authHttp.post(this.serverUrl+'/restricted',{})
    }
    ....

谢谢。

将getAuthHttp更改为使用localStorage而不是ionic storage:

export function getAuthHttp(http) {
  return new AuthHttp(new AuthConfig({
    globalHeaders: [{'Accept': 'application/json'}],
    //tokenGetter: (() => storage.get('id_token').then((val)=>{return val}) ),
    tokenGetter: (() => JSON.parse(window.localStorage.getItem("id_token"))),
    noJwtError: true,
    headerPrefix: "JWT",
  }), http);
}

据我所知,auth0sdk并没有使用离子存储来存储id\u令牌。。。它只是使用window.localStorage,所以您也可以使用它,它是一种同步方法,因此可以避免这种承诺。

适用于那些可能只是为了说这一切都很好而查看此代码的人。我忘了把“记住我”设定为“真”。。。是的,我知道。。。