Ionic2 + Angularfire2 + Facebook Войти

Я создал приложение с Ionic 2, которое использует Firebase с аутентификацией по электронной почте / паролю. Я использую angularfire2, чтобы поговорить с firebase.

export const firebaseConfig = {
  apiKey: "***********",
  authDomain: "***********",
  databaseURL: "*****************",
  storageBucket: "***************"
};

const myFirebaseAuthConfig = {
  provider: AuthProviders.Password,
  method: AuthMethods.Password
}

AngularFireModule.initializeApp(firebaseConfig, myFirebaseAuthConfig)

Все работает нормально, но теперь я решил добавить вход в Facebook, и я не могу заставить его работать!

Вот шаги, которым я следую. Я установил плагин facebook и правильно настроил Facebook - Firebase для аутентификации Facebook, добавил платформы в facebook и т. Д.:

ionic plugin add cordova-plugin-facebook4 --variable APP_ID="123456789" --variable APP_NAME="myApplication"

Теперь проблема: официальная документация от angularfire2 говорит об использовании этого метода для подключения к firebase и аутентификации пользователей facebook:

facebookLogin(){
    Facebook.login(['email']).then( (response) => {
        let facebookCredential = firebase.auth.FacebookAuthProvider
            .credential(response.authResponse.accessToken);

        **firebase**.auth().signInWithCredential(facebookCredential)
        .then((success) => {
            console.log("Firebase success: " + JSON.stringify(success));

        })
        .catch((error) => {
            console.log("Firebase failure: " + JSON.stringify(error));
        });

    }).catch((error) => { console.log(error) });
}

Если я попытаюсь настроить firebase в своем приложении, конечно, произойдет сбой.

import firebase from 'firebase';
firebase.initializeApp({
      apiKey: "************",
      authDomain: "************",
      databaseURL: "**************",
      storageBucket: "***************"
    })

Если я попытаюсь использовать этот метод с angularfire2, он скажет, что метод signInWithCredential не существует. Как я могу использовать angularfire2 в своем приложении, но использовать импорт firebase, чтобы вместе достичь входа в facebook в firebase ?!


person Glympe    schedule 08.12.2016    source источник


Ответы (2)


Не уверен, что вы уже отсортировали это, но вот что я использовал для входа в Facebook, используя angular 2.

doFbLogin() {
let permissions = new Array();
permissions = ["public_profile", "email", "user_education_history"];

this.facebook.login(permissions)
  .then((success) => {
    console.log("facebook Success response->" + JSON.stringify(success));
    this.facebook.api("/me?fields=id,name,email,gender,first_name,last_name", permissions).then((user) => {
      //console.log("user details" + JSON.stringify(user));
      console.log("access token-" + JSON.stringify(success.authResponse.accessToken));
      var provider = firebase.auth.FacebookAuthProvider.credential(success.authResponse.accessToken);

      firebase.auth().signInWithCredential(provider)
        .then((response) => {
          console.log("Firebase -fb success: " + JSON.stringify(response));
          this.af.database.object('/users/' + response.uid).update({
            name: response.displayName,
            email: response.email,
            role: 'User'
          });
          localStorage.setItem('uid', response.uid);
          this.navCtrl.push("HomePage");
        })
        .catch((error) => {
          console.log("Firebase failure:--- " + JSON.stringify(error));
        });

    }),
      (error) => {
        console.log(JSON.stringify(error));
        console.log('FAcebook not responding!');

      }

  }, error => {
    console.log("FaceBook ERROR : ", JSON.stringify(error));
  })

}

person Brian Revie    schedule 11.08.2017

Не забудьте импортировать следующее в app.module.ts и на свою страницу входа:

import * as firebase from firebase;

и это:

import {AngularFireAuthModule, AngularFireAuth} из angularfire2 / auth;

Потом:

this.facebook.login(['public_profile', 'email'])
    .then((res: FacebookLoginResponse) => {
      let firecreds = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
      this.afAuth.auth.signInWithCredential(firecreds).then((res) => {
        console.log(res);
      })
    })
    .catch(e => console.log('Error logging into Facebook', e));

PS:

Кроме того, сделайте свое приложение Facebook в Facebook Developer общедоступным, чтобы его было легче тестировать.

Введите название своего пакета для своего приложения в Facebook Developer и packagename.name.MainActivity.

Я не думаю, что вам нужно добавлять какие-либо хеш-ключи

person Christer    schedule 08.11.2017