React Native 和 Parse.FacebookUtils

React Native and Parse.FacebookUtils

我想使用 Parse 和 Facebook 将用户登录到我的 React-Native 应用程序,但 Facebook JS SDK 似乎依赖于 dom。如何使用 Facebook 登录用户?

我目前正在使用 https://github.com/magus/react-native-facebook-login 本地登录用户,因此我可以访问他们的身份验证令牌等。但是没有 FB JS SDK 就不能使用 Parse.FacebookUtils.login()。

在 React Native 中,您可以使用 RCTBridgeModule/NativeModules API.

使用 Facebook 登录用户

本质上,您必须编写一个可以直接访问本机 Facebook 登录管理器的本机模块 API。

您可以找到有关此过程的更多信息here

我设法通过在 Parse SDK Parse.FacebookUtils.logIn 流程中注释掉对 FB 的引用并删除安全检查来解决这个问题。如果您已经拥有 authData 对象,则实际上不需要 FB SDK 来使用 Parse 对用户进行身份验证。

显然不是一个理想的解决方案,所以保持开放

如果您拥有来自本机 FB SDK 的 authData,则可以完全绕过 FacebookUtils.init() 调用。这应该使用 FB:

登录到 Parse 用户
Parse.User._logInWith('facebook', {
  authData: {
    id: FB_USER_ID,
    access_token: USER_ACCESS_TOKEN,
    expiration_date: TOKEN_EXPIRATION_DATE
  }
});

这将 return 一个 Promise,与 Parse.FacebookUtils.logIn()

相同

Parse.FacebookUtils.logIn其实不依赖FB JS SDK,直接调用即可(只要传入authData对象即可)

如果它对其他人有帮助,我 运行 遇到了将 Parse 帐户与 Facebook 帐户链接和取消链接的困难。例如,unlink 方法依赖于 FB JS SDK。我通过 1. 不调用 Parse.FacebookUtils.init、2. 创建 "fake Facebook provider":

来解决这个问题
var FakeFacebookProvider = {
  getAuthType: function () {
    return 'facebook';
  },
  restoreAuthentication: function () {
    return true;
  },
};

和 3. 将其传递给 Parse.User._isLinkedParse.User._unlinkFrom:

if (user._isLinked(FakeFacebookProvider)) {
  user._unlinkFrom(FakeFacebookProvider, {

目前为止一切正常。这可能会实现与 Tarrence 的答案相同的结果,而无需编辑 Parse 代码。

我们确实需要一个不依赖于 FB JS SDK 的 Parse.FacebookUtils 的 React Native 兼容版本!