0

編集: この写真を参照してください: http://trackauthoritymusic.com/wwwroot/images/fb-issue-bug.jpg .

  • [ネットワーク] タブのスナップショットと、FB のリダイレクトを介したマイページからのすべての HTTPS ヘッダー。
  • 上の画像のウィンドウは、以下のコードの var_dump を示しています。
    • アクセス トークンの場合、デフォルトで結合された appId|secret のみを取得します。
    • Facebook からの最初の連絡先で $_REQUESTS を var_dump すると、何も得られないので、codeigniter が値を削除していないことがわかりますが、Facebook から「signed_request」投稿を受け取っていないことは間違いありません!
  • Facebook アプリの設定に問題がないことは 85.1% 確信しています。テスト中に何十もの調整とリセットを行いましたが、成功しませんでした。
  • そして、ブラウザハッシュのアクセストークンを使用して設定をクライアント側アプローチに切り替えると、有効なトークンを取得しますが、ページ上のすべてのJavaScriptを必死に回避しようとしているため、とにかくphpを統合する必要があります.
  • これらはすべて、あなたがアプリを承認した後にのみ発生します。インサイトでメンバーシップを手動で検索できますが、トークンを確認せずにアプリにアクセスできないことはわかっています。

元の投稿が4 月 24 日より前だったので、このバグは今まで脇に置いていました。

試行錯誤と調査で 3 日間が経過しました。

私の環境: facebook sdk 3 & CodeIgniter 2 を使用した LAMP

ログインコード:

    $CI->load->library('facebook', array("appId"=>APP_ID, "secret"=>APP_SECRET));
    $this->visitor['access_token'] = $CI->facebook->getAccessToken();            
    $fb_id = $CI->facebook->getUser();
    var_dump($CI->フェイスブック); // 上の図を参照
    var_dump($fb_id); // == 0
    if ($fb_id && $fb_id > 0) {
    $temp = $CI->users->getUserByFb($fb_id);
    if (!$temp) {
        $this->insertFBUser($fb_id);
        $this->visitor['redirect'] = "?prompt=newfb";
    } そうしないと {
        $this->visitor = array_merge($this->visitor, $temp);                   
        if (isset($this->visitor['user_allowed']) && $this->visitor['user_allowed'] == 0) {
            $CI->users->updateUser(array("user_allowed" => 1), $this->visitor['user_id']);
        }
    }
    } そうしないと {
    array_push($this->errors, $CI->input->get_post("error_msg", false));
    array_push($this->errors, $CI->input->get_post("error_code", false));
    array_push($this->errors, $CI->input->get_post("error_reason", false));
    array_push($this->errors, $CI->input->get_post("error", false));
    array_push($this->errors, $CI->input->get_post("error_description", false));    
    if ($CI->input->get_post("autoclose", false) == true) {
        array_push($this->errors, "javascript の stackoverflow のエンコードが変ですが、基本的にポップウィンドウのハッシュタグを変更するため、親ページが自動的に閉じてしまいます");
    }
    var_dump($this->エラー);
    die("灘");
    }

調査とデバッグ:

  • この投稿でも私の問題について説明していますが、解決策はうまくいきませんでした: stackoverflow.com/questions/8587098/suddenly-getuser-became-to-return-0-php-3-1-1-sdkこのページの DROP_QUERY_PARAMS 配列にあります。

  • FacebookはURL、投稿、またはセッションでエラーメッセージを送信せず、ページをうまくスクレイピングしています

  • 数日前はすべて正常に機能していましたが、このコードはほとんど変更していません。

  • http と https のどちらを使用してもログインに失敗するようになりました

  • ポップアップ リンクが開きます:
    www.facebook.com/dialog/oauth?client_id=222912307731474&redirect_uri=https%3A%2F%2Ftrackauthoritymusic.com%2Fmanage%2Fusers%2Flogin%3Fautoclose%3Dtrue&state=4522cb9da5bf5107d690a22eee6c5 whilea2e&scope=email&display= redirecting mypop に成功しましたdesired login url with both state and code parameters apparently valid: trackauthoritymusic.com/manage/users/login?autoclose=true&state=4522cb9da5bf5107d690a22eee6c5a2e&code=AQBfSkI4y_VxhCuF3coVvNmjetdGZjugyFv0UsLlKt5sR5MEGdY8KqpDXZKvqHTGaSHhzY4pHXuR_zmilkwmoQ5y6M9jh15GPI6DXz5E2fSBizAVlrlebriNGcNZb4DRaDFK8cxPJoa9xB2ERuimtuizmlZERNa8hwJxLXtztqkWWhkLFCaGjQvAyyf5jJRkuoztmvfKDIZz3W9lslM6fk_m

ただし、この時点では、sdk はアクセス トークンまたは Facebook セッション データを取得できません。

助けてください!

4

1 に答える 1

0

Facebook SDK 内で codeigniter の入力ライブラリを使用してコード/トークンとすべての $_GET/$_POST/$_REQUEST グローバルを取得することで、これを修正しました。

Facebook SDK の git diff を参照してください。これを壊すために何をしたかはまだわかりません。OAuth/Login は、ある時点まで一貫して機能していました。これは、コードイグナイターが時々グローバルをクリアするという単なる競合状態ではなかったと確信しています

@@ -490,10 +490,11 @@
*/
   public function getSignedRequest() {
     if (!$this->signedRequest) {
-      if (!empty($_REQUEST['signed_request'])) {
-        $this->signedRequest = $this->parseSignedRequest(
-          $_REQUEST['signed_request']);
-      } elseif (!empty($_COOKIE[$this->getSignedRequestCookieName()])) {
+      $CI = & get_instance();
+      $signed_request = $CI->input->get_post("signed_request");
+      if (!empty($signed_request)) {
+        $this->signedRequest = $this->parseSignedRequest($signed_request);
+      } else if (!empty($_COOKIE[$this->getSignedRequestCookieName()])) {
         $this->signedRequest = $this->parseSignedRequest(
           $_COOKIE[$this->getSignedRequestCookieName()]);
       }
@@ -691,15 +692,18 @@
   protected function getCode() {
-    if (isset($_REQUEST['code'])) {
-      if ($this->state !== null &&
-          isset($_REQUEST['state']) &&
-          $this->state === $_REQUEST['state']) {
-
+    $CI = & get_instance();
+    $code = $CI->input->get_post("code");
+    if (!empty($code)) {
+      $state = $CI->input->get_post("state");
+      if ($this->state !== null && $state && $this->state === $state) {
         // CSRF state has done its job, so clear it
         $this->state = null;
         $this->clearPersistentData('state');
-        return $_REQUEST['code'];
+        return $code;
       } else {
         self::errorLog('CSRF state token does not match one provided.');
         return false;
        $params['access_token'] = $this->getAccessToken();
     }
于 2013-06-09T01:40:28.980 に答える