Facebook oauth与PHP的问题

时间:2013-07-13 22:01:14

标签: php facebook oauth

我遇到了PHP SDK oauth到Facebook的一些奇怪行为。在Firefox中,我能够登录并允许该应用程序。我被重定向到我的测试页面,在那里我输出了我的用户ID,用户信息等。美丽!

接下来,我打开Chrome或IE或Safari,登录Facebook后,我被重定向到同一页面,但这一次,我没有显示登录。没有用户ID,我可以验证我登录了Facebook。

事情变得更加怪异。我在Firefox登录时回到Facebook,回到我的测试脚本,它仍然显示我已登录..即使我完全通过LogOutURL注销。发出$ facebook-> destroySession();这最终显示我正确登出..现在我无法使用任何浏览器登录。

我已经确认我有一个正确的访问令牌,并注意到登录URL中的“状态”变量随着我的测试页上的每个页面刷新而不断变化。

有什么想法吗?

这是我的测试代码..显然appid和秘密已被删除。应用程序已经创建并且看起来正在通过Facebook工作...就像我说的,它曾经工作过一次。

<?
require_once("facebook.php");

$config = array();
$config['appId'] = 'blahblahblah';
$config['secret'] = 'blahblahblah';
$config['canvas'] = false;
$config['fbconnect'] = true;

$facebook = new Facebook($config);

var_dump($facebook);
echo '<br /><br />';

echo 'Access Token<br />';
var_dump($facebook->getAccessToken());

echo '<br /><br />';


echo 'Login Status URL<br />';
var_dump($facebook->getLoginStatusUrl());

echo '<br /><br />';

$user = $facebook->getUser();

$loginUrl = $facebook->getLoginUrl();
echo 'login URL: '.$loginUrl;
echo '<br />';
$logoutUrl = $facebook->getLogoutUrl();
echo 'logout URL: '.$logoutUrl;


echo '<br />';

$user = $facebook->getUser();

echo var_dump($user);


echo '<br />';

$user = $facebook->api('/me');

var_dump($user);

//$facebook->destroySession();
?>

1 个答案:

答案 0 :(得分:0)

我发现了问题。我在日志中看到了这些:

 CSRF state token does not match one provided.

问题与多个“州”有关。我的测试脚本回应了对$ facebook-&gt; getLoginUrl()的各种调用,这显然导致了问题。我调整了测试脚本,如果$ user为'false',如果是,则调用getLoginUrl()并重定向/验证...并返回。这全面解决了问题。

以下是帮助解决此问题的链接: CSRF state token does not match one provided FB PHP SDK 3.1.1 Oauth 2.0