移动网站上的facebook oauth CSRF状态令牌与提供的不匹配

时间:2012-03-22 18:18:32

标签: php facebook mobile sdk oauth

我正在构建可通过移动设备访问的Facebook应用,并在用户接受应用权限后继续获取并返回到原始网址:

CSRF状态令牌与提供的令牌不匹配。

但是我的redirect_uri与发送请求的网址相同。我已经检查了我的Facebook应用程序设置,并且正确输入了应用程序域。

这是我的代码:

<?php
require 'facebook/src/facebook.php';

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

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
    $friends = $facebook->api('/me/friends');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}
?>
<?php if ($user) { ?>
    <?php echo $user_profile['id']; ?><br />
    <pre><?php print_r($user_profile); ?></pre><br />
    <?php
    foreach($friends["data"] as $item){
                echo $item["name"]. ' - '. $item["id"]. '<BR>';
        }
    ?>

<?php }else{ ?>
<br />
<a href="https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&scope=email,publish_stream&display=touch&redirect_uri=<?php echo urlencode('https://www.domain.com/app/mobile.php?'); ?>">App.</a></body>
<?php } ?>

2 个答案:

答案 0 :(得分:0)

这可能没用,因为我正在使用IIS和ASP.NET会话,但我怀疑您可能会看到我观察到的相同的不一致。我发现IE 6和一些特定的移动浏览器存在问题,特别是UP.Browser,没有在重定向上保留会话状态。在ASP.NET中,SessionID通常存储在浏览器cookie中,其中一些移动设备不保留cookie。我看到它们在一个Session期间发出多个SessionID值。如果没有持久的SessionID,它们就会失去获取存储状态值的能力,整个事情就会崩溃。

答案 1 :(得分:0)

我认为这是一个IIS问题。我将完全相同的代码移到了Linux服务器上,它运行得很好。