Facebook在React Native错误400

时间:2017-06-05 17:59:08

标签: 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访问令牌,我可以看到创建了一个凭证对象。

但是,Firebase始终会返回错误:

  

{"错误" {"错误":[{"结构域":"全球""理由&#34 ;:"无效","消息":"发生系统错误"}],"代码":400,"消息":"发生系统错误"}}

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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

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

到此:

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