Angular Ionic 2登录组件和身份验证服务

Angular Ionic 2登录组件和身份验证服务,angular,ionic-framework,ionic2,Angular,Ionic Framework,Ionic2,我正在我的Ionic 2应用程序中开发一个简单的登录 我有一个登录组件,它呈现我的登录视图,然后向auth服务发送电子邮件和密码,auth服务将验证、保存令牌并向登录组件返回true或false 我的登录组件: export class LoginPage { email: string; password: string; constructor(public navCtrl: NavController, public navParams: NavParams,

我正在我的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;
});

您不会直接返回布尔值,因为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;
});

首先,感谢您对可观察事物的分类和可理解的解释。我实现了您的代码,但在我的身份验证服务中,我得到:找不到“可观察”。我必须导入其他库吗?是的,您可以从'rxjs'使用import{Observable};另外,我还想补充一点,您想要的响应类型,比如登录时的true或false,您可以在服务器的POST服务上实现它,您正在进行此HTTP POST调用。首先感谢您对可观察对象的排序和可理解的解释。我实现了您的代码,但在我的身份验证服务中,我得到:找不到“可观察”。我必须导入其他库吗?是的,您可以从'rxjs'使用import{Observable};另外,我想补充一点,您想要的响应类型,比如登录时的true或false,您可以在服务器的POST服务上实现它,您正在执行这个httppost调用。