2016-04-12 22 views
1

我一直在關注this guide在Ionic 2應用程序中設置JWT身份驗證。事物的登錄方面工作得很好,但是當我嘗試使用AuthHttp類時,沒有發出請求,Chrome的network選項卡或服務器端沒有任何內容顯示。Angular2-jwt AuthHttp請求未調用

我在app.ts文件中的以下內容:

import 'es6-shim'; 
import {App, IonicApp, Platform, MenuController} from 'ionic-angular'; 
import {HTTP_PROVIDERS, Http, Headers} from 'angular2/http'; 
import {provide} from 'angular2/core'; 
import {AuthHttp, AuthConfig} from 'angular2-jwt'; 
import {AuthData} from './providers/auth-data'; 
import {UserData} from './providers/user-data'; 


@App({ 
    templateUrl: 'build/app.html', 
    providers: [ 
     HTTP_PROVIDERS, 
     provide(AuthHttp, { 
      useFactory: (http) => { 
       return new AuthHttp(new AuthConfig(), http); 
      }, 
      deps: [Http] 
     }), 
     AuthData, 
     UserData 
    ], 
    config: { 
     apiURL: 'http://localhost:9000' 
    } // http://ionicframework.com/docs/v2/api/config/Config/ 
}) 

,然後在用戶data.ts我有這樣的:

import {Injectable} from 'angular2/core'; 
import {Http, Headers, RequestOptions} from 'angular2/http'; 
import {Config, Storage, LocalStorage, Events} from 'ionic-angular'; 
import {AuthHttp, JwtHelper, tokenNotExpired} from 'angular2-jwt'; 
import {Observable} from 'rxjs/Observable'; 
import 'rxjs/Rx'; 

/** 
* @name UserData 
* @description 
* Provider for any user related data. 
*/ 
@Injectable() 
export class UserData { 

    apiURL: string; 
    contentHeader: Headers = new Headers({'Content-Type': 'application/json'}); 
    error: string; 
    jwtHelper: JwtHelper = new JwtHelper(); 
    local: Storage = new Storage(LocalStorage); 
    storage: any; 
    user: any; 

    constructor(
    public authHttp: AuthHttp, 
    private config: Config, 
    private events: Events, 
    private http: Http 
) { 
    this.apiURL = config.get('apiURL'); 
    let token = this.local.get('id_token')._result; 
    if (token) { 
     this.user = this.jwtHelper.decodeToken(token); 
    } 
    } 

    getUser() { 
    return new Promise(resolve => { 

     this.authHttp.get(this.apiURL+'/api/users/me', { 
     headers: this.contentHeader 
     }) 
     .map(res => res.json()) 
     .subscribe(
     data => { 
      resolve('test'); 
     }, 
     err => { 
      console.log(err); 
     } 
    ); 

    }); 
    } 

} 

有人能告訴我在哪裏,我要去錯了,如果我錯過了什麼?我經歷了很多次angular2-jwt文檔,對我來說一切都很順利。

感謝您的任何幫助。

編輯:

如果我做console.log(this.authHttp)getUser()函數內部,它會記錄以下內容:

AuthHttp {http: Http, _config: Object, tokenStream: Observable} 
+0

你有控制檯中的任何錯誤嗎? – kemsky

+0

不,沒有任何錯誤,我覺得很奇怪。我可以'console.log(this.authHttp)'它也顯示代碼,所以它肯定是設置的。 –

+0

可能是我的問題(https://stackoverflow.com/questions/42343576/no-requests-being-dispatched-while-using-authhttp),雖然我設法弄清楚,在我的情況下,這是由於缺少的標記。我已將默認的'id_token'名稱更改爲'token',authHttp服務找不到它(即使我在authConfig中明確定義了它)。所以當我將它改回來時,一切都開始奏效。 – Alexus

回答

0

不是完美的解決方案,但我注意到,在this similar guide從離子他們指定angular2,智威湯遜版本0.1.6。降級到這個版本,它工作正常!

1

我認爲,你忘了你的應用程序的providers屬性來指定HTTP_PROVIDERS

import {HTTP_PROVIDERS, Http} from 'angular2/http'; 
(...) 

@App({ 
    templateUrl: 'build/app.html', 
    providers: [ 
    HTTP_PROVIDERS, 
    provide(AuthHttp, { 
     useFactory: (http) => { 
      return new AuthHttp(new AuthConfig(), http); 
     }, 
     deps: [Http] 
    }), 
    AuthData, 
    UserData 
    ], 
    config: { 
    apiURL: 'http://localhost:9000' 
    } // http://ionicframework.com/docs/v2/api/config/Config/ 
}) 

編輯

你只需要導入Headers類:

import {HTTP_PROVIDERS, Http, Headers} from 'angular2/http'; 
+0

嗨蒂埃裏,不幸的是,即使在那個位置它仍然在做同樣的事 –

+0

你也忘了導入'Headers'類;-) –

+0

仍然沒有運氣:( –