为什么Firebase拾取的Facebook用户ID与Facebook Graph中与同一帐户关联的Facebook ID不同?

Nat*_*ate 5 javascript facebook-graph-api firebase

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

我正在使用的代码直接从Firebase教程中获得,该教程标题为“ User Login&Authentication”(用户登录和身份验证),网址为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");
Run Code Online (Sandbox Code Playgroud)

所有这些都可以很好地工作,并记录正确的信息。

但是,记录的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?

jwn*_*ngr 5

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

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

在此页面上搜索“应用程序范围的用户 ID”以获取其官方变更日志信息。