好的,我已经有了一个现有的网络应用程序。后端是休息界面。最初,要登录,用户必须注册,然后使用他的凭据登录。但我想整合facebook登录;
所以在我的休息界面中我又添加了两个方法
registerfbUser
:注册用户帐户
loginfbUser
:允许用户在使用他的脸书帐号后登录系统
注册
我已经能够使用facebook connect和图形api连接到facebook。现在,将使用ajax调用loginfbUser,并以JSON格式提供详细信息。
我的问题是我应该将哪些信息传递给方法loginfbUser
以验证Facebook用户。我不能只传递facebook id,因为api将会打开,因此任何人都可以用json格式的facebook id发出POST请求
答案 0 :(得分:2)
在我们公司,我们通过AJAX广泛使用FB的身份验证来“登录”用户。我们这样做的方式很简单。在用户“登录”或通过页面上的FB的JS SDK进行身份验证后,我们会在AJAX调用中将访问令牌发送到我们的服务器。然后,我们的服务器通过向graph.facebook.com发送/ me api调用并从那里获取FB id来交叉验证此访问令牌。通过这样做,我们确定只有这个人和这个人。
完成此操作后,我们存储此信息(访问令牌和用户的脸谱ID)是服务器端会话,因此同一会话中的所有未来呼叫都将正确识别用户。
如果您的起始点是FB应用程序选项卡或画布应用程序,则访问令牌和fbId由Facebook在签名请求中发送,您可以“取消签名”并用于存储在会话中并避免必须调用graph.facebook.com(可能有点慢,形成性能/用户体验瓶颈)
答案 1 :(得分:1)
AFAIK,Facebook Connect的重点是让网络开发者不再担心用户名/密码。我相信这个想法是将Facebook ID存储在用户数据库中,并使用Graph API查看该用户当前是否登录Facebook。通过这种方式,您的网站可以通过Facebook在Facebook上进行身份验证。
答案 2 :(得分:1)
假设您使用的是JS SDK和PHP SDK,那么执行需要FB身份验证的操作的任何函数都应该如下所示:
$this->_facebook = new Facebook(array(
'appId' => $this->app_id,
'secret' => $this->app_secret,
'fileUpload' => true,
'cookie' => true
));
try {
$this->_fb_userid = $this->_facebook->getUser();
} catch (FacebookApiException $e) {
// the user is not authenticated!
return;
}
try {
$this->_fb_me = $this->_facebook->api('/me');
} catch (FacebookApiException $e) {
// API call didn't work, show error...
return;
}
如果您的用户通过javascript进行身份验证,PHP SDK将自动了解登录用户。 JS SDK通过cookie将此信息发送到您的服务器,PHP SDK会自动读取它。