2012-03-26 84 views
5

我不明白一件事..如何识别通过Facebook api登录的用户?

在我的网站上有一个按钮,从Facebook的api JS SDK的FB.login方法。

当用户第一次访问我的网站,点击按钮 - 得到他的Facebook的个人资料中的数据,然后我们就在我在数据库服务器上检查是否有用户用这个ID,还是没有?如果不行 - 写一个新行。我们也在我的网站上创建用户的个人资料。

现在的问题,当用户下一次访问(上一个按钮,点击,如果他没有登录)我们的网站 - 如何识别他与他在我们网站上的个人资料结合起来?例如,向他出示了他的个人资料,或者他可以在它改变什么......

在平时的授权,我们比较的密码和用户的数据库登录,这里是没有这种可能。 AccessToken始终在变化。以为只是检查用户的FB ID,但也许,任何人都可以替换他的FB ID,然后输入他的个人资料,不是吗?

什么名堂在这种情况下使用?

回答

6

不管用户访问您的网站第一次还是不是你一直使用的FB.login方法。此方法验证用户是否与您的应用程序有关系,并在用户接受您的应用程序时为您提供访问令牌。

当使用Facebook登录认证用户时,用户在数据库中注册时不包含密码,您只有facebookid才能将facebook帐户与您的网站配置文件相关联。可以使用服务器端FB.login方法提供的accesstoken或通过使用下一个示例facebook docs所示的javascript来获取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

您可以使用Facebook ID来识别用户在数据库中,这是每一个Facebook的用户是唯一的。

+4

任何人都可以用这个ID替换我的网站上的用户ID配置文件? – Denis 2012-03-26 17:11:20

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的SDK(:真正的状态)时运行。它使您的网站能够识别已连接的用户。

https://developers.facebook.com/docs/reference/javascript/FB.init/

+0

非常感谢! :) – Denis 2012-03-26 17:18:09

+0

尝试通过获取他的状态来识别用户,UX将随个性化内容而大大提高。 – Alexcode 2012-03-26 17:22:14