My Ionic 2アプリにログインがあり、認証トークンがローカルストレージに保存されます。次に、このトークンをHTTPリクエストで使用したいと思います。私の認証サービスでIonic 2のHTTPリクエストでローカルストレージのトークンを使用
私は次の方法があります。
export class Rides {
token: string;
constructor(public http: Http, public authentification: Authentification) {
this.authentification.authToken().then((val) => {
this.token = val;
console.log(this.token);
});
}
getOpenRides() {
var headers = new Headers();
headers.append('Authorization', 'Token token=' + this.token);
return this.http.get('URL', { headers: headers })
.map(res => res.json());
}
}
それは私の乗り物サービスで正しいトークンをログに記録します。私が持っているHTTP要求を行い、私のサービスで
authToken() {
return this.storage.get('auth_token').then((val) => {
return val;
});
}
そしてをコンストラクタ。しかし、HTTPリクエストでトークンを使用すると、私のサーバーはtoken = undefinedが送信されたことを示します。
どうすればいいですか?
これは私がgetOpenRidesを呼び出すと、私は結果を表示したい場所をページコンポーネントです:
import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { Rides } from '../../providers/rides';
/*
Generated class for the Agenda page.
See http://ionicframework.com/docs/v2/components/#navigation for more info on
Ionic pages and navigation.
*/
@Component({
selector: 'page-agenda',
templateUrl: 'agenda.html',
providers: [Rides]
})
export class AgendaPage {
openRides: any;
constructor(public navCtrl: NavController, public navParams: NavParams, public rides: Rides) {}
ionViewDidLoad() {
this.openRides = this.rides.getOpenRides()
.subscribe(response => { console.log(response.rides) });
}
}
いつ、どこで 'getOpenRides'関数を呼びますか? – Alex
私は開いた乗り物を表示したいページコンポーネントでそれを呼び出します。私はそれを私の質問に加えました。 – almo
ええと、別のコンポーネントで認証トークンを設定したとしますか?その場合、問題はあなたのコンポーネントの 'provider:[Rides]'にあるべきです。コンポーネント内のプロバイダーを宣言すると、サービスの新しいインスタンスなので、別のコンポーネントやサービスによって設定されたプロパティにアクセスすることはできません。代わりにngModuleに 'Providers:[Rides、AuthService]'を追加して、コンポーネントから単一のプロバイダを削除してください。これは、そのモジュール内のすべてのコンポーネントが**同じ**サービスを使用し、他のコンポーネントから設定された変数にアクセスできることを意味します。 – Alex