2

PHP SDK 3.2.2 を使用して Facebook からアクセス トークンを取得しようとしています。これは、Facebook でユーザーが正常にログインした後にリダイレクト URL に配置したコードの下にあります。私の問題は、ユーザーがAPPへのアクセスを許可した後、 $this->facebook->getAccessToken()がユーザーアクセストークンを返さないことです.'AppId | AppSecret'という形式の文字列だけで、コードを含める必要があります.ユーザー アクセス トークンを手動で取得します。これは機能しますが、getAccessToken を使用すると正しいトークンが返されない理由がわかりません。また、$code を使用するよりもユーザー アクセス トークンを取得する良い方法があるかどうかも知りたいです。これは良い方法だとは思わないからです。

注: $this->facebook を使用するのは、Codeigniter ライブラリとしてロードするためです。

  $access_token  = $this->facebook->getAccessToken();

  //-------------------------------------------------------------------------
  //echo '<br/>Access Token: ' . $access_token;
  // Generare Token if not created:
  $code = $_REQUEST["code"];

  if ( isset($code) ) {
     //echo '<br/>Code Enviado: ' . $code;
     //exit();
     $appId     = $this->facebook->getAppId();
     $appSecret = $this->facebook->getAppSecret();

     $redirectTo = base_url('asociar/acc_facebook/step2/');

     $token_url="https://graph.facebook.com/oauth/access_token?client_id="
        . $appId . "&redirect_uri=" . urlencode($redirectTo)
        . "&client_secret=" . $appSecret
        . "&code=" . $code . "&display=popup";
     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);
     $access_token = $params['access_token'];

     //echo '<br/>Repitiendo el Token';

     $this->facebook->setAccessToken($access_token);
     //echo '<br/>Second Access Token Fijado: ' . $access_token;
  }
  //-----------------------------------------------------------------------

アップデート:

この問題は、PHP SDK で CI を使用したことが原因です (それについては自分の回答を確認してください) が、この回答は Facebook PHP SDK でこの問題を抱えているすべての人に有効です (@Imbru の回答を確認してください)。

4

2 に答える 2

2

@Imbruは解決策を教えてくれました。クレジットがあれば、彼に渡してください。

これを考慮してください: Codeigniter を使用すると、すべてのセッション データが Cookie に保存され、サーバーに保存されるのではなく、ブラウザーに送信されます。はい、彼らはそれを行い、それは他の多くの問題につながります(大量のデータを保存するとセッションが失われ、ブラウザはそれらの一部のみを返送しますが、それは別の歴史です)。

CI を使用する場合、解決策はセッション コア クラスを、PHP $_SESSION でセッションを管理する別のセッション クラスで上書きすることです。たとえば、https: //bitbucket.org/xperez/core-session-storage-for-codeigniter (I私のプロジェクトでそれを使用し、魅力のように機能します)。そうすれば、PHP-sdk を使用するときに値をセッションに保存し、Facebook クラスが値を取り戻そうとするときに、それを実行できるようになります。

もちろん、Facebook PHP SDK に問題がある場合は、 $_SESSION が必要な値を格納しているかどうかを確認してください。問題は、値を取得したいときにサーバーに値がないことです。未認証のエラーに。

于 2014-06-15T08:24:05.183 に答える