2017-02-10 3 views
2

Я использую финальную версию Ionic 2 с плагином angular2-jwt. Я успешная регистрация и получить маркер, который я экономлю на хранениеПриложение Ionic 2 не получает токен JWT из хранилища

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

Спасибо.

+0

Для людей, которые могут смотреть на этот код, просто чтобы сказать, что все в порядке. Я забыл запомнить меня правдой ... да, я знаю ... – ACES

ответ

0

Изменить Вы 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 не используется для хранения Ионные для хранения id_token в любом случае ... это только с помощью window.localStorage, поэтому вы можете просто использовать это тоже и его синхронный метод, чтобы избежать этого обещания.

Смежные вопросы