我正在使用Facebook Auth作为我的Ionic应用程序,并且正在使用Firebase模块进行身份验证。我相信我已经正确设置了firebase模块,但是在我尝试登录时遇到了一个错误。我将指出登录方法在Web浏览器上进行测试时已经工作过一次,从此产生了以下错误。我已尝试在Android模拟器上进行测试,因为混合结果(错误构建)。这是我的代码。
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import firebase from 'firebase';
import { Facebook } from '@ionic-native/facebook';
//import { AngularFireModule } from 'angularfire2';
import { HomePage } from '../home/home';
/**
* Generated class for the LoginPage page.
*
* See http://ionicframework.com/docs/components/#navigation for more info
* on Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-login',
templateUrl: 'login.html',
})
export class LoginPage {
homePage = HomePage;
constructor(public navCtrl: NavController, public navParams: NavParams, public facebook: Facebook) {
}
login2(){
//this.navCtrl.setRoot(this.homePage);
let provider = new firebase.auth.FacebookAuthProvider();
firebase.auth().signInWithRedirect(provider).then(() => {
firebase.auth().getRedirectResult().then((result) => {
console.log(JSON.stringify(result))
this.navCtrl.push(this.homePage)
})
}).catch(function(error){
console.log(JSON.stringify(error));
});
}
}

模板基本上只是一个按钮,其中(点击)=' login2()'。
当我单击此按钮时,程序崩溃并重新加载并显示错误:
未捕获的TypeError:无法读取属性'数据集'为null 在HTMLDocument.r(bundle.js:6112) r @ bundle.js:6112
只有在我点击此按钮时才会发生这种情况,因此我知道它与我使用firebase的方式有关。我想这可能是这些firebase方法需要cordova(因此除非我本地建造,如果我没有弄错的话)不能工作,或者我需要一些额外的设置(比如确保firebase& #39;数据库'已经分配给app.module中的监听器或其他东西。我的另一个理论是,由于它曾经工作过一次,它仍然保持已经登录并因此而遇到一些奇怪的错误。提前谢谢。
答案 0 :(得分:0)
你不能在Cordova环境中使用signInWithRedirect()
,你有两个选择,你可以:
使用原生Facebook插件,然后将凭据传递给Firebase,如下所示:https://javebratt.com/ionic-2-facebook-login/
您需要安装一堆Cordova插件才能使重定向工作,如下所示:https://firebase.google.com/docs/auth/web/cordova
希望有所帮助:)
答案 1 :(得分:0)
这对我来说很好,也许它会帮助你:
facebookSignIn(){
let provider = new firebase.auth.FacebookAuthProvider();
firebase.auth().signInWithRedirect(provider);
firebase.auth().getRedirectResult().then((user) => {
console.log("Successful facebook sign-in!");
this.navCtrl.setRoot('HomePage');
}).catch((error) => {
alert(error.message);
});
}