0

facebook php apiを使用して、Webアプリの一部へのアクセスを制御しています。基本的には、ユーザーがFacebookにログインしているかどうかを確認し、ページが読み込まれるたびにユーザーがアプリを承認し(基本的な許可)、状態に応じて印刷します。

のようなもの、、そのようにif($check_user_lo_npe) { echo 'Welcome!'; }単純です。ユーザーがFacebookのユーザー設定からアプリを削除すると、トークンが無効になることに気付くまで、すべてが正常に機能しています。トークンが無効であることがわかっていてもtrue、関数から応答が返されます。check_user_lo_npe私が言ったように、ユーザーはアプリを削除しました。これは私が許可をチェックする方法です:

function check_user_lo_npe() {
    global $facebook;
    global $data;
    $fb_user_id = $facebook->getUser();
    if ($fb_user_id) {
    try {
        if(!isset($_SESSION['fb_user_profile'])) {
            $_SESSION['fb_user_profile'] = $facebook->api('/me');
            $temparray = $facebook->api('/me/friends');
            $_SESSION['fb_user_friends'] = count($temparray[data]);
        }
        $data->reg_user($_SESSION['fb_user_profile'],$_SESSION['fb_user_friends']);
        return array(true,'');
    } catch (FacebookApiException $e) {
        $fb_user_id = NULL;
        return array(false,$e->getMessage());
    }
    } else {
        return array(false,'');
    }
}

ユーザーがアプリを削除して再度ログイン画面に送信できるようにする必要があります。この関数は例外が発生したときに検出するはずですが、どういうわけか何も表示されません...なぜですか?

4

2 に答える 2

1

これらの$_SESSION変数は、Facebook SDKではなく、アプリによって設定されますよね?Facebookセッションにアクセスしようとしないと、そのセッションがまだアクティブであるかどうかを確認できません/

各ページでアクティブなFacebookセッションがまだあるかどうかを確認する必要がある場合は、Javascript SDKのFB.GetLoginStatus()を確認するか、 (たとえば)/me/permissionsへのAPI呼び出しを行って、アクセストークンがまだ有効であることを確認します。

とは言うものの、FacebookのAPIへのアクセスの試みが失敗したことを検出する例外ハンドラーを用意し、その時点でユーザーに認証フローを送信させるのも簡単かもしれません。

于 2012-11-01T21:11:49.127 に答える
0

あなたのif ($fb_user_id)行はおそらくfalseと評価されています。これによりreturn array(false,'');、elseステートメントで例外がトリガーされることはありません。

IDチェックを通過した場合は$_SESSION、アプリを削除する前にデータを入力していて、再チェックしていないようです。に入れたら、$_SESSIONFacebookに戻って確認しなければ、例外がスローされる理由はありません。

于 2012-11-01T21:10:44.887 に答える