我正在尝试找出一种在我的应用中为用户存储唯一ID的好方法。我正在使用facebook登录进行用户管理,并为用户提供了一个类:
function FacebookUser(userObj) {
if (userObj) {
this.name = userObj.name;
this.id = userObj.id;
this.picture = userObj.picture.data.url;
this.isLoggedIn = true;
} else {
this.name = 'Login';
this.id = 0;
this.picture = '';
this.isLoggedIn = false;
}
}
基本上,我有角度处理Facebook登录的服务:
.service('facebookService', function () {
this.getFacebookUser = function (callback) {
$.getScript("//connect.facebook.net/en_US/sdk.js", function () {
var appId = "12312312313123";
FB.init({
appId: appId,
status: true,
cookie: true,
xfbml: true,
version: 'v2.4'
});
FB.getLoginStatus(function (response) {
if (response.status == 'connected') {
FB.api('/me?fields=picture,name,email', function (data) {
callback(new FacebookUser(data));
})
} else {
FB.login(function (response) {
FB.api('/me?fields=picture,name,email', function (data) {
callback(new FacebookUser(data));
})
});
}
})
});
}
})
我想弄清楚的是唯一标识符是什么。我想只使用用户的电子邮件地址,因为它保证是唯一的,但不想要求额外的权限。最初,我想使用id字段,但我不清楚id是否会改变。在facebook文档中,他们解释了id字段:
此人的用户帐户的ID。此ID对每个应用程序都是唯一的 并且不能在不同的应用程序中使用。我们的升级指南提供 有关应用特定ID的更多信息
根据这一点,该ID是应用程序所独有的,不能在不同的应用程序中使用。但是,我想在这里更清楚一点。如果一个用户今天登录应用程序,然后在几个月内再次登录,他们的ID是否相同(如果它是相同的应用程序),还是会改变?次要问题是,如果/当我进行更改并获得新的应用ID时,ID是相同还是更改?它在技术上仍然是相同的应用程序,只是一个不同的版本。我的假设是,因为它是一个不同的appId,facebook认为它是一个完全不同的应用程序,但我是facebook api的新手,并向专家寻求建议。
答案 0 :(得分:10)
我不是专家,但我会尽力回答你的问题。
如果一个用户今天登录应用程序,然后在几个月内再次登录,那么他们的ID是否相同(如果它是相同的应用程序),还是会更改?
只要App ID相同,即使在登录之间,用户ID也不会改变,无论中间有多长。
次要问题是,如果/当我进行更改并获得新的应用ID时,ID是相同还是更改?
新的App ID表示不同的App,这意味着用户ID将会更改。但是,如果您获得新的应用程序ID并需要访问同一个用户,则可以使用Facebook的Business Mapping API。
摘自facebook文档:
如果您需要在多个应用中映射相同的用户ID或运行跨应用促销,我们已添加了一个名为Business Mapping API的新API。这使您可以跨应用程序映射登录用户的ID,只要这些应用程序全部归同一个企业所有。