0

EDIT * * *FacebookのPHP-SDKが解除SESSIONないユーザーがアプリケーションの権限

を取り消した場合、私は、私は十分に/正確に説明していないと思いますが、手順は次のとおりですセッション:

1.ユーザーログインはjssdkで、私のアプリケーションを受け入れます。

2.-私はPHP-SDKを使用してgetUser()を使用しました。いくつかのページを制限または表示する。

3.ユーザーはログアウトしませんが、プロファイル設定から直接アクセス許可を取り消します。

4.-ユーザが自分のアプリケーションに戻ると(ページやブラウザを閉じることなく)、PHP-SDKはまだ有効な 接続ユーザとしてgetUser()を返します!

5. PHP-SDKがgetUser()が有効なIDであると言うと、ユーザーがそのパーミッションを取り消したことをアプリケーションがどのように知っていると思いますか?

私のユーザーは、JS-SDKと私のアプリケーションにログインし、次のコード:

FB.login(function(response) { 
       // handle the response 
      }, {scope: 'email,user_likes'}); 

- これは、ユーザーが削除すると、

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '****************', // App ID 
     channelUrl : 'localhost', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true, // parse XFBML 
     oauth:true 
    }); 

    // Additional initialization code here 
    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document)); 
</script>` 

しかし非同期のスクリプトですアプリケーションが自分のプライバシー設定からアクセスして再度アプリケーションにアクセスしようとすると、このコードは引き続きユーザーIDを出力します$user = $facebook->getUser();

facebook.phpをPHP-SDKからチェックしました。unsetSESSIONにあるメソッドがありますが、何も設定が解除されていません。

protected function clearPersistentData($key) { 
    if (!in_array($key, self::$kSupportedKeys)) { 
     self::errorLog('Unsupported key passed to clearPersistentData.'); 
     return; 
    } 

    $session_var_name = $this->constructSessionVariableName($key); 
    unset($_SESSION[$session_var_name]); 
    } 

これはバグですか?ユーザーがアプリケーションの権限を取り消したとしても、Facebookは常にセッションを読み込みますか?

ユーザーがアプリケーションに接続していないときは、の動作では0を出力する必要がありますが、もちろんこれは起こりません。

答えて

0

Facebookからのセッションとアクセス許可は2種類あります。

セッションは、アプリケーション固有でコード固有のものです。このセッションを制御する必要があります。

誰かがあなたのアプリの権限を取り消した場合、それはすべてFacebookの権限を削除します。あなたのFacebookアプリで正しい設定をしていない限り、あなたのアプリは通知されません。そして、あなたはまだセッションをクリアする必要があります。

セッションに以前に取得した情報が保持されている間に、以前にアクセス権を持つFacebook上で何かを実行しようとするとエラーが発生します。

+0

質問の最後に余分な情報を追加しました。 – Danny

+0

私の答えは変わりません。誰かが許可を取り消すと、あなたがJS SDKを使用していることを知る方法がなく、現在のセッションが進行します。Facebookの許可が必要なメソッドを呼び出し、拒否されたレスポンスを探す必要があるかどうかを確認する。 –