【问题标题】:Facebook: JS SDK and PHP SDK not working together properlyFacebook:JS SDK 和 PHP SDK 无法正常协同工作
【发布时间】:2013-11-11 16:30:45
【问题描述】:

我使用JS SDK登录用户的页面:

<? header('P3P: CP="NOI ADM DEV PSAi NAV OUR STP IND DEM"');?>
<?php
    session_start();
?>
<!DOCTYPE html>
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
</head>
<body>
<div id="fb-root"></div>
<script>
  if(!window.console){ window.console = {log: function(){} }; }

  window.fbAsyncInit = function()
  {
    FB.init({
      appId  : 'xxx',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });

  };

  (function() {
    var e = document.createElement('script');
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
  }());

  function fbLogin() {
           FB.login(function (response) {
                   if (response.authResponse) {

                       FB.api('/me', function (response) {

                           window.location = "tester.php";

                       });
                   } else {

                       fbLogin();
                   }
               }
               , {perms:'user_birthday, user_location'});
       }

    </script>

<INPUT TYPE="BUTTON" ONCLICK="fbLogin()" value="login">

用户在登录时被重定向到的页面(tester.php):

<? header('P3P: CP="NOI ADM DEV PSAi NAV OUR STP IND DEM"'); ?>
<?php
session_start();

$fbconfig['appid' ] = "xxx";
$fbconfig['secret'] = "xxx";

$user            =   null;
try{
    include_once "facebook.php";
}
catch(Exception $o){
    echo '<pre>';
    print_r($o);
    echo '</pre>';
}

$facebook = new Facebook(array(
  'appId'  => $fbconfig['appid'],
  'secret' => $fbconfig['secret'],
  'cookie' => true,
));

$user = $facebook->getUser();

if($user){

     $access_token = $facebook->getAccessToken();

}

else
{
echo "no logged user";
}   
echo $user;
echo $access_token;

?>
<pre>
    <?php print_r($_COOKIE);
    print_r($_SESSION); ?>
</pre>

我注意到在用户第一次被重定向到 tester.php 时没有设置访问令牌。它只返回“appID|appSecret”。注意用户是正确返回的。点击刷新将 access_token 更新为有效的。 当我在重定向 (setTimeout(function() {window.location = "tester.php";},1250);) 之前添加一点延迟时,一切正常,我得到了一个有效的访问令牌。我不热衷于实施延迟,因为没有办法说明延迟应该多长时间。这是一个已知的错误吗?

信息:此问题仅在用户第一次访问应用程序时发生。一旦用户之前授权该应用程序,它就可以正常工作。

【问题讨论】:

  • 谁能重现这个错误?还是只有我?谢谢!

标签: php facebook facebook-graph-api facebook-javascript-sdk facebook-php-sdk


【解决方案1】:

【讨论】:

  • 是...吗?看了回复后我不太确定。我一直想知道为什么我似乎是唯一一个遇到这个(非常基本的)问题的人......
【解决方案2】:

这不是因为延迟!这是因为 csfrToken 检查在第一次请求时失败。

See base_facebook.php -> getCode()

第一次调用将始终返回 false(第 698 行)。如果将此行更改为

return $_REQUEST['code'];

第一次通话也很好。

【讨论】:

  • 有趣...知道为什么 php sdk 是这样设计的吗?还有:如果它总是在第一次请求时失败,那么为什么在重定向到该页面之前添加延迟时它不会失败?
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多