8

これは私にかなりの頭痛の種を与えています。私はpage-tab-applicationを持っています。ここでは、DB-interactionがfacebook-user-idを使用してデータを割り当てて保存し、ユーザーのアクセス許可を確認します。弱い前まではすべてが正常に機能していましたが、12月の変更により、この設定は機能しなくなりました。

config.php:

$facebook = new Facebook( array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
)); 

index.php: config.phpを含み、署名されたリクエストを取得します(質問には重要ではありません)

javascript.js: read-user-status.phpを呼び出し、データを処理します

read-user-status.php: json-responseを提供し、config.phpをインクルードし、$ facebook-> getUser()-functionを呼び出してuidを取得します

ページの読み込み直後にindex.phpから呼び出された場合でも、uidを取得することもあれば、取得しないこともあります。ひどく、私は通常、ページをリロードしてから再び機能するまで少し待たなければなりません。しかし、これが常に当てはまるとは限りません。これはすべて私にとって非常に奇妙です。

編集:この呼び出しについて言及する必要があります:

$uid = $facebook -> getUser();
if ($uid) {
    try {
       // Proceed knowing you have a logged in user who's authenticated.
       $user_profile = $facebook -> api('/me');
    } catch (FacebookApiException $e) {
       error_log($e);
       $uid = FALSE;
     echo "EXCEPTION $e";
   }
}

「EXCEPTION現在のユーザーに関する情報を照会するには、アクティブなアクセストークンを使用する必要があります」と表示されます。

似たような質問がたくさんあることは知っていますが、私の特定の(そしておそらく新しい重大な変更が依存している)問題に役立つ答えはありませんでした。

EDIT2:これはsdk-bugだと思います(https://developers.facebook.com/bugs/238039849657148、CBroeに感謝します)。もちろん、回避策に関する推奨事項は大歓迎です。

編集3、 一時的な解決策ajaxリクエストを行うたびに、FB.getLoginStatusまたはFB.loginから取得したトークンを投稿し、phpファイルに読み込んで、$facebook->setAccessTokenで設定します。すべての状況に適しているわけではなく(間違いなくpostを使用する必要があります)、速度が遅く、セキュリティ上の問題が発生しますが、それでも機能します。

4

5 に答える 5

8

11月の初めに報告したバグの影響を受けているようです。https://developers.facebook.com/bugs/238039849657148

彼らはそれを確認し、修正に取り組んでいると言っていますが、変更は数日しか経っていないので、少し急いでください…</ p>

于 2012-12-02T11:19:08.690 に答える
2

私は次のことを行うことでこれを機能させました...

if(!$user){

$loginUrl = $facebook->getLoginUrl(array(
                'scope' => 'email',
                'redirect_uri' => $app_url
                ));
    header('Location: ' . $loginUrl);
}

また、統合するアプリを追加しました。

  • FacebookログインのあるWebサイト
  • Facebookのアプリ
  • ページタブ
于 2012-12-07T13:59:18.850 に答える
0

リクエストにアクセストークンを追加してみてください。

$accessToken = $facebook->getAccessToken();
$user_profile = $facebook->api('/me?access_token=' . $accessToken);
于 2012-11-30T08:42:43.403 に答える
0

修正されるまで、この回避策を見つけました(変更が行われるまで間に合わないようです)。ajaxリクエストを行うたびに、FB.getLoginStatusまたはFB.loginから取得したトークンを投稿し、phpファイルに読み込んで、$facebook->setAccessTokenを介して設定します。すべての状況に適しているわけではなく(間違いなくpostを使用する必要があります)、速度が遅く、セキュリティ上の問題が発生しますが、それでも機能します。

于 2012-12-01T16:46:47.547 に答える
0

運が良ければ、php sdkのバージョンは、_graphメソッド宣言の直後よりもセッション変数を登録します。

//このメソッドを以下で見つけます
        保護された関数_graph($ path、$ method ='GET'、$ params = array())
        {{

//以下の_graphメソッド宣言コードの直後に貼り付けます:
            if(isset($ _SESSION["fb_"。$this->getAppId()。 "_ access_token"]))
            {{
                $ this-> setAccessToken($ _SESSION["fb_"。$this->getAppId()。 "_ access_token"]);
            }
//ここまで
//そしてあなたは行ってもいいです
//覚えておいてください:あなたのバージョンのSDKはセッションにアクセストークン変数を登録している必要があります
//ajax呼び出しの直後
//githubで公開されたSDKの最後のコミット前にバージョンを取得するためにgitを使用しました
于 2013-05-13T15:09:50.410 に答える