0

コードは fb マニュアルに従っています。ユーザーがページを更新すると、ユーザーの ID を取得できないことに気付きました。ユーザーはアドレス バーから URL の後の文字列全体を消去する必要があります。ユーザー情報を取得できるようにするため..

<?php 

   $app_id = "myid";
   $app_secret = "mysecretkey";
   $my_url = "http://myurl.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'] . "&scope=publish_actions";

     header("Location: " . $dialog_url);
   }
   if($_SESSION['state'] && ($_SESSION['state'] === $_REQUEST['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);

     $_SESSION['access_token'] = $params['access_token'];

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

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

var_dump は、最初のリダイレクト後に必要なすべての情報を返しますが、ページを更新すると null が返されます。おそらく、セッション Cookie を「破棄」する必要がありますか??

4

2 に答える 2

1

問題を回避するために、コードを少し変更しました。

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

   if ($params['access_token'] == NULL) {
         header("Location: " . $my_url);
   }

 $user = json_decode(file_get_contents($graph_url));
 }

したがって、access_token が有効でない場合、ページは文字列クエリなしで「強制的に」リロードされ、新しいページが取得されます.. :) https://developers.facebook.comにも便利な参照がありました/blog/post/2011/05/13/how-to--handle-expired-access-tokens/ そして @Anvesh Saxena の貢献に感謝します

于 2013-04-26T07:25:53.350 に答える