首页 文章

如何从Angularfire2 facebook身份验证中返回true或false

提问于
浏览
0

好的,所以我对 AngularFire2Angular2 一般都是新手,我正在学习 AngularFire2 提供的身份验证方法 .

到目前为止,我已使用 Facebook 成功实现了登录,我的代码目前位于 service .

所以代码很简单(可能看起来很恶心),我通过 Facebook 登录检索用户访问令牌,他们的facebookId,拨打Facebook图表并检索名字,姓氏,性别,电子邮件等,然后在 Firebase 中保存这些数据是我执行上述操作的代码:

loginWithFacebook(): FirebaseListObservable<string> {

  return FirebaseListObservable.create(obs => {
      this.af.auth.login({
          provider: AuthProviders.Facebook,
          method: AuthMethods.Popup,
          scope: ['public_profile']
      }).then((authState: any) => {

      let userRef = this.af.database.object('/users/' + authState.uid); // get user profile

       userRef.subscribe(user => {

       let url = `https://graph.facebook.com/v2.8/${user.facebookId}?fields=first_name,last_name,gender,email&access_token=${user.accessToken}`;

       this.http.get(url).subscribe(response => {

          let result = response.json()
             userRef.update({
               first_name: result.first_name,
               last_name: result.last_name,
               gender: result.gender,
               email_address: result.email,
               facebookId: user.facebookId
              })
            })
         })

          obs.next(userRef);

        }).catch(err => {
            obs.throw(err)
        });
    });

我从我的 login.component 调用了这个,如图所示:

loginFacebook() {
       this.loginSubscription = this.service.loginWithFacebook().subscribe(data => {
          console.log('after finish', data);  
        });
    }

我有问题是我想要捕获如果登录失败或通过我已经尝试在Service方法中填充 Observable ,但是当我在console.log 'after finish'时,数据我看到以下内容:

enter image description here

有人能否说明我如何从这种方法中返回真/假?如果有人能够看到更清洁的方式,我将非常感激 .

1 回答

  • 0

    现在无法测试,你可以这样做:

    loginWithFacebook(): Observable<boolean> {
    
       return this.af.auth.login({
              provider: AuthProviders.Facebook,
              method: AuthMethods.Popup,
              scope: ['public_profile']
          })
          .map((authState: any) => {
             if (!authState) return false;
    
             let userRef = this.af.database.object('/users/' + authState.uid); // get user profile
    
             userRef.subscribe(user => {
    
                let url = `https://graph.facebook.com/v2.8/${user.facebookId}?fields=first_name,last_name,gender,email&access_token=${user.accessToken}`;
    
                this.http.get(url).subscribe(response => {
    
                   let result = response.json();
                   userRef.update({
                      first_name: result.first_name,
                      last_name: result.last_name,
                      gender: result.gender,
                      email_address: result.email,
                      facebookId: user.facebookId
                   })
                })
             })
    
             return true;    
          }).catch(err => {
             return Observable.of(false);
          });
    }
    
    loginFacebook() {
       this.loginSubscription = this.service.loginWithFacebook().subscribe(data => {
          console.log('after finish', data);  
       });
    }
    

相关问题