1

アプリが読み込まれておらず、次の 2 つのシナリオで以下のエラーが発生します。

a) キャッシュと Cookie をクリアした後、または以前に使用したことのない PC から、任意のブラウザーでアプリに初めてアクセスしたとき。

b) ユーザー B がアプリ (および Facebook) からログアウトした直後に、ユーザー A が同じ PC とブラウザーから、キャッシュまたは Cookie を消去せずにアプリにアクセスしようとした場合。

ただし、F5 キーを押して Web ページを更新すると、正しく機能しています。

これは、ログ ファイルに表示されるエラーです。

{"readyState":4,"responseText":"Invalid access token","status":200,"statusText":"OK"}

ユーザー検証コード:

require_once(dirname(__DIR__).'/lib/common/AppInfo.php');
require_once(dirname(__DIR__).'/sdk/src/facebook.php');
require_once(dirname(__DIR__).'/lib/logic/UsersLogic.php');
require_once(dirname(__DIR__).'/lib/common/Log.php');

if (substr(AppInfo::getUrl(), 0, 8) != 'https://' && $_SERVER['REMOTE_ADDR'] != '127.0.0.1') {
    header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit();
}

try {
    $facebook = new Facebook(array(
            'appId'  => AppInfo::appID(),
            'secret' => AppInfo::appSecret(),
    ));
    $user_id = $facebook->getUser();
} catch (Exception $e) {
    exit("Error getting facebook data");
}

if ($user_id) {
    try {
        $basic = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            exit("Invalid access token");
        }
    }
    if($basic==null){
        exit("Application not installed");
    }
    $user=UsersLogic::getUser($user_id);
    if($user==null){
        exit("User not registered in database");
    }

}
else{
    exit("No user logged");
}

なぜそれが起こるのですか?おそらく、新しいユーザー アクセス トークンを強制的に要求する必要がありますか? (どうやって)

ありがとう

4

1 に答える 1

0

これは完全に予想されることです。最初のシナリオでは、Cookie がなく、ユーザーが誰であるかがわからないため、有効なアクセス トークンを取得する方法がありません。2 番目のシナリオでは、Facebook からログアウトします (または認証を解除します)。アプリ) を使用すると、必要なアクセス トークンが無効になります。

しかし、そのエラーは、クライアント側のコードからのものですよね? その場合、FB.getLoginStatus実際に必要なアクセストークンを持っていない限り実行しないように、使用しているコードをラップする必要があります。

于 2012-10-25T19:17:45.183 に答える