Facebook 在 React Native 中使用 Firebase 登录错误 400

Posted

技术标签:

【中文标题】Facebook 在 React Native 中使用 Firebase 登录错误 400【英文标题】:Facebook login with Firebase in React Native error 400 【发布时间】:2017-11-06 13:56:11 【问题描述】:

我无法使用他在 RN 中的 Facebook 凭据在 Firebase 中注册用户。 Facebook 和 Firebase 应用程序设置正确,因为在 Swift 中一切都按预期工作。 OAuth 重定向 URI 也设置正确。

但是,当我尝试从 RN 执行相同的过程时,它失败了。我的设置如下,当用户点击我的登录按钮时,我调用 FB 的LoginManager.logInWithReadPermissions(['public_profile', 'email']) 并在其成功时调用FirebaseManager(这是我用于管理 Firebase 的自定义类)signUpWithFacebook()。我正确获得了一个 FB 访问令牌,并且可以看到创建了一个凭证对象。

但是,Firebase 总是返回错误:

"error":"errors":["domain":"global","re​​ason":"invalid","message":"发生系统错误"],"code":400 ,"message":"发生系统错误"

FirebaseManager 如下所示:

import  AsyncStorage, NativeModules  from "react-native";
import * as firebase from 'firebase';

const firebaseConfig = 
    apiKey: "key",
    authDomain: "domain",
    databaseURL: "db_url",
    projectId: "project_id",
    storageBucket: "storage_bucket"
;
const firebaseApp = firebase.initializeApp(firebaseConfig);

const FBSDK = require('react-native-fbsdk');
const 
    AccessToken
 = FBSDK;

export default class FirebaseManager 

    constructor() 
        // Some logic...
    

    signUpWithFacebook() 
        AccessToken.getCurrentAccessToken().then((data) => 
            let accessToken = data.accessToken
            console.log('FB accessToken: ' + accessToken)

            const provider = new firebase.auth.FacebookAuthProvider();
            const credential = provider.credential(accessToken);
            console.log('FB credential: ' + credential)
   
            firebase.auth().signInWithCredential(credential)
                .then()
                .catch((error) => 
                    console.log('Failed to sign in Firebase with Facebook. ' + error)
              )
        )
    

我还想指出,Firebase 的匿名和电子邮件/密码身份验证没有问题。

我目前的解决方法是从 Swift 进行 Facebook 登录,并在 RN 中返回用户对象,并带有桥和 RN 的 NativeModules

关于我的项目的更多信息:

反应原生:0.44.2

火力基地:4.0.0

react-native-fbsdk: 0.6.0

任何帮助将不胜感激!

【问题讨论】:

您是否已启用 Facebook 作为 Firebase 上的身份验证提供程序? 还要确保您在 Firebase 控制台中为 Facebook 配置了正确的 OAuth 客户端 ID 和密码。 是的,Facebook 已作为身份验证提供程序启用,并且 OAuth 客户端 ID 已正确设置。正如我所提到的,我可以使用 Facebook 本地登录 Firebase,即,如果我在 Swift 中登录,并在 RN 中使用NativeModules 传递用户对象。我还可以使用匿名登录和电子邮件/密码登录从 RN 正确注册。因此,我想我已经正确设置了我的 firebase 对象。 你解决过这个问题吗?我遇到了完全相同的问题。 我也有同样的问题。有什么解决办法吗? 【参考方案1】:

可能是一个漫长的尝试,但这看起来非常类似于 firebase JS SDK 中的一个问题。解决方案是通过更改这些行来不创建 FacebookAuthProvider 的实例:

const provider = new firebase.auth.FacebookAuthProvider();
const credential = provider.credential(accessToken);

对此:

var credential = firebase.auth.FacebookAuthProvider.credential(accessToken);

【讨论】:

以上是关于Facebook 在 React Native 中使用 Firebase 登录错误 400的主要内容,如果未能解决你的问题,请参考以下文章

在 react-native 和 firebase 3.1 中登录 Facebook

在 React Native 组件中使用 Facebook 登录功能

React-Native:Facebook 登录后返回应用程序?

Facebook 在 React Native 中使用 Firebase 登录错误 400

在 react native 上安装 facebook SDK

React Native Facebook 登录和分支 AppDelegate