【问题标题】:Why is the Facebook user id picked up by Firebase different to the Facebook id associated with the same account in the Facebook Graph?为什么 Firebase 获取的 Facebook 用户 ID 与 Facebook Graph 中与同一帐户关联的 Facebook 用户 ID 不同?
【发布时间】:2014-08-06 20:26:53
【问题描述】:

我已将 Facebook 身份验证与 Firebase 集成到我的网站中。我正在使用 Firebase JavaScript API。

我使用的代码直接取自 Firebase 教程,标题为“用户登录和身份验证”,可在此处获取:https://www.firebase.com/docs/web/guide/user-auth.html

var myRef = new Firebase("https://#######.firebaseio.com");
var auth = new FirebaseSimpleLogin(myRef, function(error, user) {
    if (error) {
        // an error occurred while attempting login
        console.log(error);
    } else if (user) {
        // user authenticated with Firebase
        console.log("User ID: " + user.id + ", Provider: " + user.provider);
    } else {
        // user is logged out
    }
});
auth.login("facebook");

这一切都很好,记录了正确的信息。

但是,记录的 ID(即在 Firebase 仪表板的数据中可见的用户 ID)与我通过 Facebook Graph 获得的 Facebook ID 不同。

使用 Firebase,我得到一个 17 位的用户 ID。 使用 Facebook Graph (https://developers.facebook.com/tools/explorer?method=GET&path=me%3Ffields%3Did%2Cname&version=v2.0),我得到一个 9 位数的用户 ID。

这意味着我无法使用 Firebase 登录、获取 Facebook id 并通过 Facebook Graph 发出请求 - 同一用户的用户 id 不同。

为什么会存在这种差异?如何使用 Firebase 获取 Facebook Graph 中显示的相同 Facebook id?

【问题讨论】:

    标签: javascript facebook-graph-api firebase


    【解决方案1】:

    Facebook 最近推出了其 Open Graph 的 2.0 版。随之而来的是很多变化。其中之一是 Facebook 返回给 Facebook 应用程序的用户 ID。现在,每个应用程序都接收他们所谓的“应用程序范围 ID”,而不是每个应用程序都接收用户的全局 Facebook ID。这意味着每个应用都会收到用户 X 的不同用户 ID,即使每个唯一 ID 仍映射到用户 X。如果您需要能够跨多个应用映射用户,可以使用他们的 Business Mapping API。最终,这是 Facebook 做出的改变,我们 Firebase 无法控制。

    如果您从 Simple Login 获得 17 个字符的 ID,可能是因为您的 Facebook 应用程序是在 Facebook login v2 更改发生之前创建的(一个多月前)。我在您的 Open Graph Explorer 请求中看到它正在使用 v2。但是对于简单登录,我们混合使用 v1 和 v2,具体取决于您的 Facebook 应用程序的创建时间。我们正在努力为您添加一个选项,以决定您要使用哪个版本的 Facebook Open Graph API,但尚未添加。如果你现在想使用 v2,你只需要创建一个新的 Facebook 应用程序,一切都会正常。如果您想继续使用 v1,请注意 Facebook 将在大约 10 个月后停止支持它。

    Search for "App-scoped User IDs" on this page for their official changelog information.

    【讨论】:

    • 谢谢你,雅各布。现在一切正常。我注意到 Open Graph 已经更新 - 没有把两个和两个放在一起!
    • @Nate 我遇到了同样的问题。你能告诉我你是怎么解决这个问题的吗?我正在使用 firebase auth ui 进行身份验证。
    • 我可以通过将 facebook userId 存储在 firebase 而不是 firebase auth userId 来解决这个问题,谢谢
    【解决方案2】:

    新用户 ID 在成功登录时从 Firebase 返回的对象内的 providerData 对象中返回。

    【讨论】:

    • 请添加更详细的答案。请添加有关您的答案的更多详细信息。
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2011-10-31
    • 1970-01-01
    • 2014-11-21
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多