我无法理解一件事......
在我的网站上有一个来自facebook的api JS SDK的FB.login方法的按钮。
当用户第一次访问我的网站时,点击按钮 - 从他的facebook的个人资料中获取一些数据,然后我们将在数据库中检查我的服务器是否有这个ID的用户?如果不是 - 写一个新行。我们还在我的网站上创建了用户的个人资料。
现在问题是,当用户下次访问我们的网站时(并点击按钮,如果他没有登录) - 如何识别他与我的网站上的个人资料相结合?例如,向他展示他的个人资料,或者他可以改变其中的任何内容......
在通常的授权中,我们比较密码和用户在数据库中的登录,这里没有这种可能性。 AccessToken一直在变化。以为只是检查用户的FB ID,但是,或许,任何人都可以替换他的FB ID,并输入他的个人资料,不是吗?
在这种情况下使用了哪些技巧?
答案 0 :(得分:6)
无论用户是否第一次访问您的网站,您始终都使用FB.login方法。此方法验证用户是否与您的应用程序有关系,并在用户接受您的应用程序时为您提供访问令牌。
当使用Facebook登录来验证用户时,您的数据库中的用户注册不包含密码,您只有facebookid将Facebook帐户与您网站的个人资料相关联。可以使用服务器端FB.login方法提供的accesstoken或通过javascript(例如facebook docs的下一个示例)获取facebook id。
FB.login(function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
});
在响应对象中,您可以获取facebook id(response.id)。
答案 1 :(得分:3)
如果您查询图谱API https://graph.facebook.com/me?access_token=USER_ACCESS_TOKEN,您将获得UID,然后与您的数据库进行比较。 您正在使用Javascript API,因此您应该使用FB.getLoginStatus方法来获取已连接用户的UID。
https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/
在使用FB.init(status:true)初始化SDK时,默认情况下会运行此方法。它使您的网站能够识别已连接的用户。
https://developers.facebook.com/docs/reference/javascript/FB.init/
答案 2 :(得分:1)
您可以使用Facebook ID识别数据库中的用户,这对每个Facebook用户都是唯一的。