【问题标题】:Facebook Authentication Error when using apps.facebook.com as URL使用 apps.facebook.com 作为 URL 时的 Facebook 身份验证错误
【发布时间】:2012-06-02 04:36:08
【问题描述】:

我正在尝试使用 Facebook 身份验证登录我的网站,它工作正常。但是,当我使用 https://apps.facebook.com/myApp 访问应用程序时,我得到一个错误

状态不匹配。你可能是 CSRF 的受害者

这是我从 facebook 使用的代码,我认为有问题

$my_url

 <?php 

   $app_id = "YOUR_APP_ID";
   $app_secret = "YOUR_APP_SECRET";
   $my_url = "https://www.example.com/login.php";

   session_start();
   $code = $_REQUEST["code"];

   if(empty($code)) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
     $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

     echo("<script> top.location.href='" . $dialog_url . "'</script>");
   }

   if($_REQUEST['state'] == $_SESSION['state']) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

     $graph_url = "https://graph.facebook.com/me?access_token=" 
       . $params['access_token'];

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }

 ?>

【问题讨论】:

    标签: php facebook facebook-graph-api iframe facebook-authentication


    【解决方案1】:

    您真的应该使用 facebook 为 FTP 提供的 SDK。然后,您无需重新创建任何图形调用,因为它已为您处理。

    但是有两个问题:

    1. 您需要在登录调用中对整个返回 URL 进行编码,即

      &redirect_uri=" . urlencode($my_url . "&state=" . $_SESSION['state']);

    2. 如果要将数据传递到 iFrame,则需要在名为“app_data”的参数中发送它 - 所有其他参数都将被删除。此 app_data 在“签名请求”中发送,因此您需要解码签名请求。详细信息http://developers.facebook.com/docs/authentication/signed_request/(再次使用 facebook SDK,因为它可以轻松处理签名请求!)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多