如果我们使用JS SDK登录,那么在服务器端获取facebook会话

Kir*_*ran 13 facebook login

朋友们,

我使用JS SDK为我的网站设置了facebook登录.

  1. 如果通过JS SDK登录使用,我们是否应该交叉验证会话在服务器端是否有效,因为客户端可以轻松制作.

  2. 由于我使用JS SDK,服务器将无法访问facebook会话.如果我需要在服务器端验证会话,我可以使用php-sdk和extern会话,就像在https://developers.facebook.com/docs/reference/php/中指定的那样.在这种情况下,我需要启用CURL PHP扩展以使其运行并担心在使用php sdk时性能是否会下降.

你能帮我找到上述问题的答案吗?

Fab*_*nes 14

php sdk和javascript是完全相反的,就像Julian H. Lam所说的那样,事实上它们是为了一起使用而构建的.

php sdk文档中你可以找到:

与Facebook SDK for JavaScript集成

与Facebook SDK for JavaScript结合使用,PHP SDK可以在客户端和服务器之间无缝共享用户会话.如果用户使用Facebook登录并且已经授权您的应用程序,那么JavaScript SDK可以将用户会话保留在cookie中,而PHP SDK会在不对开发人员进行任何干预的情况下读取该cookie.

要启用此功能,请确保在嵌入和初始化JS SDK时,将传递给FB.init()的对象的状态和cookie参数都设置为true.

通过使用基本逻辑,这一切都有意义,在客户端,您可以创建侦听器以检索用户状态(如果他已登录,如果他已授予权限,如果他已注销),则在服务器端执行此类操作根本没有任何意义.

所以我的建议是使用Javascript SDK来处理用户事件,比如我之前提到过的事件,并处理用户操作的响应,比如当用户做类似事件时,或者使用feed对话共享帖子使用php SDK,您只需检查您是否拥有有效用户,因为您在使用javascript SDK处理登录进程后,为客户端和服务器端共享相同的cookie,如果您这样做$fb_id = $facebook->getUser()(在初始化PHP SDK之后,你会得到用户的facebook id,既然你知道你有一个有效的用户,你可以使用PHP SDK来查询有关用户的信息,代表用户发布等等.

这是一个正确加载带有cookie支持的javascript SDK的示例:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
      appId      : 'YOUR_APP_ID',                        // App ID from the app dashboard
      channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel file for x-domain comms
      status     : true,                                 // Check Facebook Login status
      xfbml      : true,                                  // Look for social plugins on the page
      cookie     : true
    });

    // Additional initialization code such as adding Event Listeners goes here
  };

  // Load the SDK asynchronously
  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "//connect.facebook.net/en_US/all.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>
Run Code Online (Sandbox Code Playgroud)

这是服务器端的一个简单代码,只是为了启发你:

require_once("facebook.php");

$config = array();
$config[‘appId’] = 'YOUR_APP_ID';
$config[‘secret’] = 'YOUR_APP_SECRET';
$config[‘fileUpload’] = false; // optional

$facebook = new Facebook($config);
try {
    $user_profile = $facebook->api('/me','GET');
    $user_name = $user_profile['name'];
    $user_email = $user_profile['email'];

} catch(FacebookApiException $e) {
    // If the user is logged out, you can have a 
    // user ID even though the access token is invalid.
    // In this case, we'll get an exception, so we'll
    // just ask the user to login again here.
}
Run Code Online (Sandbox Code Playgroud)

PS:此服务器端代码仅在用户已使用范围电子邮件授予权限时才有效