【问题标题】:Ionic 2 app does not get JWT token from storageIonic 2 应用程序未从存储中获取 JWT 令牌
【发布时间】:2017-06-29 01:47:03
【问题描述】:

我正在使用带有 angular2-jwt 插件的 Ionic 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]}
 ...
]

还有我的 auth.ts:

...
@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',{})
    }
    ....

谢谢。

【问题讨论】:

  • 对于那些可能正在查看此代码的人来说,这一切都很好。我忘了把记住我设置为真的......是的,我知道......

标签: angular ionic2 jwt


【解决方案1】:

像这样改变你的 getAuthHttp 以使用 localStorage 而不是离子存储:

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

据我所知,auth0 sdk 并没有使用 Ionic 存储来存储 id_token ......它只是使用 window.localStorage,所以你也可以使用它,它是一种同步方法,因此可以避免这种情况承诺的东西。

【讨论】:

    猜你喜欢
    • 2018-11-26
    • 2018-06-16
    • 2021-08-26
    • 2019-02-06
    • 2019-02-01
    • 2020-11-30
    • 2018-10-22
    • 2018-12-07
    • 2019-05-06
    相关资源
    最近更新 更多