【问题标题】:Facebook Session Transfer js-SDK to php-SDKFacebook 会话传输 js-SDK 到 php-SDK
【发布时间】:2011-09-21 13:51:56
【问题描述】:

我正在使用 PHP SDK 2.1.2 并使用标准 http://connect.facebook.net/en_US/all.js 作为 JS SDK。

这就是我想要实现的目标:

1) 初始化JS Sdk, 调用Fb.UI with (email,user_location,user_birthday), method: 'oauth', 作为响应,如果用户成功授予权限,则对服务器进行ajax调用,然后使用PHP-SDK调用 Graph API 并获取所需的数据。 (好吧,您可能会争辩通过 JS SDK 调用图形 API,但当前场景需要我使用 PHP SDK)

问题

通过 ajax 调用的文件没有初始化会话,我得到 null,相反,facebook sdk 应该理想地加载 cookie 并具有活动会话,因为权限已经在客户端授予。

我的代码

主文件

<?php
session_start();
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
require 'src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
    'appId'  => 'xxxxxxxxxxxxxxxxxxxxxxxx',
    'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyy',
    'cookie' => true,
));

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
   try {
       $uid = $facebook->getUser();
       $me = $facebook->api('/me');
       print_r($me);
   } catch (FacebookApiException $e) {
                error_log($e);
   }
 }

?>

<!doctype html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
    <title>php-sdk</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">         
    </script>
</head>
<body>

<input type="button" onclick="getpermission();"/>
<!--
  We use the JS SDK to provide a richer user experience. For more info,
  look here: http://github.com/facebook/connect-js
-->
<div id="fb-root"></div>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
  FB.init({
      appId   : '<?php echo $facebook->getAppId(); ?>',
      session : <?php echo json_encode($session); ?>, // don't refetch the session when   PHP already has it
      status  : true, // check login status
      cookie  : true, // enable cookies to allow the server to access the session
      xfbml   : true // parse XFBML
    });

function getpermission(){
      FB.ui({
        method: 'oauth',
        client_id: <?php echo $facebook->getAppId(); ?>,
        perms: 'email,user_location,user_birthday'
        },function(permObj) {
            if(permObj){
                $.ajax({
                        type: "POST",
                        url: 'page2.php',
                        dataType:'text',
                        success: function(data) {

                                return;
                                        },
                        error:function (xhr, ajaxOptions, thrownError){
                            alert(xhr.status);
                            alert(thrownError);
                        }    
                      });

            }
            });
        }

</script>
</body>

通过 AJAX 调用的文件

<?php
session_start();
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
require 'src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId'  => 'xxxxxxxxxxxxxxxx',
'secret' => 'yyyyyyyyyyyyyyyyyyyyyyyyyyyy',
'cookie' => true,
));

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
        print_r($me);
    } catch (FacebookApiException $e) {
          error_log($e);
    }
 }

 echo "hello";
 ?>

如果您在上面的示例中看到,我应该在警报框中获取整个 /me 对象,而不是只得到“你好”。我不知道为什么这不起作用?我错过了什么?

场景:- 如果我在授予权限后重新加载页面(top.location.href),我会得到所需的对象,但我们正试图避免使用这种机制重新加载。我还尝试设置所需的 P3P 标头,因为我认为可能存在一些 cookie 问题,但仍然无法加载。

另外,我已经用 PHP SDK 2.1.1、2.1.2、3.0.1 尝试过这个,我听说新的 PHP-SDK 还不兼容 JS SdK,是真的吗?

提前致谢。

【问题讨论】:

    标签: facebook session-cookies fbjs facebook-php-sdk


    【解决方案1】:

    您不能使用 AJAX 调用设置 cookie:由域 A 在域 B 上设置第三方 cookie 要求域 B 上的页面正在获取域 A 上的页面,您的 ajax 调用没有做。

    我建议不要尝试使用 cookie,而是从对 oauth 对话框的响应中获取访问令牌(permObj-&gt;access_token,除非我错了,我可能是)并将其作为请求参数发布你的 AJAX 调用。然后,您可以使用令牌值调用 $facebook-&gt;setAccessToken 方法,您应该已准备就绪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多