2017-07-24 71 views
0

我为我的Ionic应用程序使用Facebook身份验证,并且正在使用Firebase模块进行身份验证。我相信我已经正确设置了firebase模块,但是当我尝试登录时遇到了一个错误。我将指出登录方法在Web浏览器上测试时曾经工作过一次,并且此后已经生成以下错误。我已经尝试过在android模拟器上进行测试,因为混合了结果(buggy build)。这是我的代码。Facebook OAuth在Ionic中登录错误

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身份()' 按钮。 当我点击这个按钮,程序崩溃和重新加载错误:

遗漏的类型错误:无法读取性能在HTMLDocument.r空 的“数据集”(bundle.js:6112) R 7 bundle.js :6112


当我点击这个按钮,所以我知道它有事情做与我使用火力的方式这只发生。我想这可能是因为这些firebase方法需要cordova(因此如果我没有弄错,除非本地构建,否则无法工作),或者需要一些额外的设置(我确定firebase数据库已经存在)分配给监听器或app.module中的某个东西)。另一个理论是,因为它曾经工作过一次,它仍然认为它已经登录并因此而遇到一些奇怪的错误。提前致谢。

回答

0

不能使用signInWithRedirect()一样,在科尔多瓦的环境中,你有两个选择,你可以:

  1. 使用原生的Facebook插件,然后通过凭证向火力点是这样的:https://javebratt.com/ionic-2-facebook-login/

  2. 您需要安装一堆科尔多瓦插件得到重定向工作,像这样:https://firebase.google.com/docs/auth/web/cordova

希望它能帮助:)

+0

OK,要么这些方法在网页浏览器中运行时的工作(使用离子型服务)?根据我的理解,除非在本地设备上工作,否则cordova特定的内容不可用。如果不是,那么当没有本地运行时,我可以使用什么替代方法? –

+0

如果你想在网络浏览器中做到这一点,那么这是你需要的一个:https://firebase.google.com/docs/auth/web/facebook-login – javebratt

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

我已经改变它,现在我可以看到过渡到主页,但然后应用程序重新启动自己...虽然这一次没有错误信息。但是,它不会提示我输入登录凭据......但仍然认为它是成功的吗?我会尝试在页面加载和其他一些事情上执行注销。 –

+0

你的应用程序流程是什么?如果用户未登录,是否将用户重定向到登录页面?如果是的话,你怎么做? –

+0

我只是去启动登录页面。我用离子服务运行,所以我认为浏览器不会保存登录凭据,但我不知道如果这是真的。我应该这样做吗?我在app.component中对用户做了些什么? –