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

标签 firebase react-native firebase-authentication facebook-login

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

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

但是,Firebase 总是返回错误:

{"error":{"errors":[{"domain":"global","reason":"invalid","message":"A system error has occurred"}],"code":400,"message":"A system error has occurred"}}

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 的 NativeModules 返回 RN 中的用户对象。

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

react-native: 0.44.2

firebase: 4.0.0

react-native-fbsdk: 0.6.0

如有任何帮助,我们将不胜感激!

最佳答案

可能是一个长期的尝试,但这看起来与 firebase JS SDK 中的一个问题非常相似。解决方案是不创建 FacebookAuthProvider 的实例,方法是更改​​以下行:

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

为此:

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

关于firebase - Facebook 在 React Native 错误 400 中使用 Firebase 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44374934/

相关文章:

java - 如何限制 Firebase 电子邮件登录中的错误密码尝试?

java - 如何获取当前用户的 Firebase token

java - 获取 Firebase 中的元素数量

javascript - 如何使用 Angular 存储对对象或全局对象的引用?

JavaScript:在创建具有共享值的监听器的循环期间封装上下文

ios - Swift Firebase Like Post in Table View

ios - React Native 构建版本 : linker command failed with exit code 1

ios - 在 macOS Big Sur 上安装 react native 时出现 "Undefined symbol: protocol descriptor for Swift.ExpressibleByFloatLiteral"问题

javascript - 在 react-native 中存储私有(private)数据的最佳方式是什么?

java - Firebase 如何在 Auth 中定义当前用户?