2

タイトルと同じ質問です。サーバー側の認証フローを操作するために、最新の php-sdk (v3.1.1) を使用しています。

Chrome には 2 つのタブがあります。1 つは Facebook ページで、もう 1 つは php テスト ページです。次の 2 つの問題が何度も発生します。

  • $facebook->getUser()ログインしても0を返します。
  • $facebook->getUser()ログアウトしてもIDを返します。

これを回避する必要があります。提供された access_token を使用してグラフ API リクエストを開始し$response->error->type == "OAuthException"、アクティブなセッションがあるかどうかを確認してください。

$facebook->getUser()「安定」を使う方法はありますか?私はSOをよく検索しましたが、php-sdk 3.1.1のベストアンサーはまだ見つかりません。

どんな助けにも感謝します。ありがとう。

4

1 に答える 1

9
  1. ログイン。FB SDK のドキュメントの例 に従ってgetUser()、ログアウトしている場合でも userId を返しますが、Cookie は FB アカウントに関連付けられています。ユーザーがログインしていることを検出するには、使用する必要があります

    $user = $facebook->getUser();
    //Check Access token
    if ($user) {
         try {
            $user_profile = $facebook->api('/me');
         } catch (FacebookApiException $e) {
            $user = null;
         }
    } 
    if ($user) { 
        //logged-in
    } else {
        //not logged-in
    }
    

    アプリにログインするには、次の URL に従って、隣接するタブではなくアプリにユーザーがログインするようにします (アプリによって実行される意図したアクションに基づいてスコープを渡していることを確認してください)。

    $loginUrl = $facebook->getLoginUrl(
        'scope' => ...
    );
    
  2. ログアウト。PHP サーバーはセッションごとにいくつかのアクセス トークンの値を保存しているようです。そのため、ブラウザでログアウトしても、サーバーはこれらのトークンを有効にしています。実際のところ、バグなのか機能なのかわかりませんが、ユーザーのログアウト後に Facebook によって破棄されることはありません。

    これらのトークンを破壊するために、私はこれらを使用しています:

    $facebook->destroySession();
    

    ユーザーがログアウトするたびに呼び出してい$facebook->getLogoutUrl()ます。

于 2012-05-13T08:22:09.157 に答える