首页 文章

Ionic2 Angularfire2 Facebook登录

提问于
浏览
0

我用Ionic 2创建了一个应用程序,它使用Firebase和email / passoword身份验证 . 我正在使用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 for Facebook auth,将平台添加到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导入以便在firebase中一起实现facebook登录?!

2 回答

  • 0

    不确定你是否已经对它进行了排序,但这是我用于Facebook登录时使用的角度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));
      })
    

    }

  • 0

    请记住在 app.module.tslogin page 中导入以下内容:

    import * as firebase from "firebase";

    还有这个:

    import { AngularFireAuthModule, AngularFireAuth } from '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 Developer中公开你的Facebook应用程序,这样更容易测试 .

    在Facebook Developer和 packagename.name.MainActivity 输入您的应用程序的包名称

    我不认为你需要添加任何 Hash keys

相关问题