我遇到了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();
?>
答案 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