как вернуть true или false из аутентификации Angularfire2 facebook

Итак, я новичок в AngularFire2 и Angular2 в целом, я изучаю метод аутентификации, который предоставляет AngularFire2.

До сих пор я успешно реализовал вход в систему с помощью Facebook, мой код в настоящее время находится в файле service.

Таким образом, код прост (может показаться вам отвратительным), я вхожу через Facebook, получаю токен доступа пользователей и их facebookId, делаю вызов на график Facebook и получаю имя, фамилию, пол, адрес электронной почты и т. д., а затем сохраняю эти данные в Firebase this мой код для выполнения вышеуказанного:

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);  
        });
    }

Проблема, с которой я столкнулся, заключается в том, что я хочу зафиксировать, если вход в систему с помощью facebook завершается неудачей или проходит. Я пытался заполнить Observable в методе службы, однако, когда я console.log 'после завершения', данные я вижу следующее:

введите здесь описание изображения

Может ли кто-нибудь пролить свет на то, как я могу вернуть true/false из этого метода? Если кто-то может увидеть более чистый способ сделать это, я был бы очень признателен.


person Code Ratchet    schedule 01.02.2017    source источник
comment
Пожалуйста, не задавайте свои вопросы дважды! stackoverflow.com/q/41974101/3631348   -  person slaesh    schedule 01.02.2017


Ответы (1)


Невозможно проверить прямо сейчас, вы можете сделать это так:

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);  
   });
}
person slaesh    schedule 01.02.2017
comment
Только что попробовал это: в настоящее время возникают следующие ошибки: Свойство «карта» не существует для типа «Promise‹FirebaseAuthState›». и свойство "of" не существует для типа "typeof Observable" - person Code Ratchet; 01.02.2017
comment
Смотрите ваш другой вопрос, давайте обсудим только в одной теме! там он разбит на отдельные функции и подписки.. - person slaesh; 01.02.2017