2017-07-24 97 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中對用戶做了些什麼? –