为什么Firebase获取的Facebook用户id与Facebook Graph中与同一帐户关联的Facebook i

Why is the Facebook user id picked up by Firebase different to the Facebook id associated with the same account in the Facebook Graph?

本文关键字:Facebook 关联 用户 Firebase id 为什么 Graph 获取      更新时间:2023-09-26

我已经将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 id,出现在Facebook图?

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

如果你从Simple Login得到一个17个字符的ID,这可能是因为你的Facebook应用程序是在Facebook登录v2发生变化之前创建的(一个多月前)。我在你的Open Graph Explorer请求中看到它正在使用v2。但在Simple Login中,我们使用的是v1和v2的混合,这取决于你的Facebook应用是何时创建的。我们正在努力增加一个选项,让你决定你想要使用哪个版本的Facebook Open Graph API,但还没有添加。如果你想在此时使用v2,你只需要创建一个新的Facebook应用程序,一切都应该工作。如果你想继续使用v1,请注意Facebook将在大约10个月内停止支持它。

在本页搜索"应用程序范围内的用户id"以获取其官方更改日志信息。

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