2017-04-14 68 views
1

我正在使用Fireface登錄Facebook的Ionic應用程序。對於我跟着這裏的文檔:https://github.com/angular/angularfire2/blob/master/docs/Auth-with-Ionic2.mdTypeScript:返回Promise的結果

幾乎在文檔的最後,你可以看到一段代碼,做的FB登陸(使用本機FB應用程序如果可用):

signInWithFacebook(): firebase.Promise<FirebaseAuthState> { 
    if (this.platform.is('cordova')) { 
     return Facebook.login(['email', 'public_profile']).then(res => { 
     const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken); 
     return firebase.auth().signInWithCredential(facebookCredential); 
     }); 
    } else { 
     ... 
    } 
    } 

這有種方法signInWithFacebook返回類型的螺絲。實際上,這個方法應該返回由Facebook.login(...)觸發的Promise結果 - 但它確實返回了具有不同數據類型的FacebookLogin-Promise本身。 我有點困惑,我可以重新建模這些行以正確返回由firebase.auth()創建的Promise。signInWithCredential(facebookCredential)。

你有任何提示/想法?

非常感謝!

+0

還沒有使用標誌性的庫,所以不知道你實際上正在接受什麼。你能詳細解釋一下你的意思嗎?實際上,方法應該返回「 –

+0

signInWithFacebook的返回類型是firebase.Promise 。但Facebook.login()的返回類型是Promise - 它不兼容。但是解決Facebook.login()的Promise的結果將符合signInWithFacebook的方法定義。我試圖做的是返回已解決的Promise(由Facebook.login()創建)的結果 - 而不是Promise本身。 – Daniel

+0

'return firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken).then((facebookCredential)=> firebase.auth()。signInWithCredential(facebookCredential));'? – n00dl3

回答

0

好的,所以這裏有一個解決方案(或者解決方法 - 無論你想調用它)。

我改變了:

  • 方法signInWithFacebook並返回void
  • 它需要一個匿名函數作爲當內承諾解決

這裏它被執行的說法是代碼:

signInWithFacebook(success: (FirebaseAuthState) => void): void { 
    if (this.platform.is('cordova')) { 
     Facebook.login(['email', 'public_profile']).then(res => 
     { 
      const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken); 
      firebase.auth().signInWithCredential(facebookCredential).then(fbas => success(fbas)); 
     } 
    ); 
    } 
    else { 
     this.auth$.login({ 
      provider: AuthProviders.Facebook, 
      method: AuthMethods.Popup 
     }).then(res => success(res)); 
    } 
    } 

這就是如何調用方法:

this._auth.signInWithFacebook2(res => {...});