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","reason":"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