我无法使用他在 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/