我正在我的Ionic 2应用程序中开发一个简单的登录。
我有一个登录组件,它呈现我的登录视图,然后向auth服务发送电子邮件和密码,auth服务将验证、保存令牌并向登录组件返回true或false。
我的登录组件:
export class LoginPage {
email: string;
password: string;
constructor(public navCtrl: NavController, public navParams: NavParams, public authentifiction: Authentification) {}
login() {
this.authentifiction.login(this.email, this.password);
}
loginSuccess() {
console.log('Success');
}
loginError() {
console.log('Failed');
}
}
还有我的身份验证服务:
export class Authentification {
public authorized: boolean;
constructor(public http: Http, private alertCtrl: AlertController, public storage: Storage) {}
login(email, password) {
var params = 'email=' + email + '&password=' + password;
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
return this.http.post('URL', params, {
headers: headers})
.map(res => res.json())
.subscribe(
data => this.loginSuccess(data.auth_token),
error => this.loginError()
);
}
loginSuccess(auth_token) {
this.storage.set('auth_token', auth_token);
???
}
loginError() {
???
}
}
根据登录是否成功,我如何让身份验证服务返回true或false?
这整个可观察到的东西对我来说仍然有点困惑…
您不会直接返回布尔值,因为http请求不会立即回复。相反,你会向来电者返回一个可观察到的信息,告诉他"我还没有答案,但这里有一个可观测到的信息会在我得到答案后通知你"。然后,呼叫者只订阅了这个可观察的内容(比如邮件列表),并收到一个带有答案的信号(比如接收电子邮件)。
login(email, password): Observable<boolean> {
...
return this.http.post('URL', params, {
headers: headers
}).map(res => {
this.storage.set('auth_token', res.json().auth_token);
return true;
});
来电者:
login() {
this.authentifiction.login(this.email, this.password).subscribe(res => {
console.log('success');
}, error => {
console.log('error');
});