TL; DR Facebook javascript SDKはfacebook.comから直接ログアウトしたユーザーの正確なログインステータスを判別できません。FB JS-SDKはFBのユーザーログアウトを直接検出できません
私は、認証のためにjavascript SDKを使用してFacebookアプリを開発しています。私は、ユーザーがfacebook.com上で直接Facebookからログアウトしたときに、SDKがアプリケーションページでユーザーのログイン状態を理解できないことに気付きました。私はそれを次の簡単なテストケースで煮詰めました。
1つのタブでfacebook.comにログインします。別のタブでは、アプリケーションページを下にレンダリングします(必要に応じてMY_APP_IDを置き換えます)。このアプリに一度も許可を与えていないユーザーとしてFacebookにログインしている場合は、[ログイン]をクリックして許可します。どちらにしても、あなたがログインしていることを示すいくつかのイベントが発生しているはずです。
ここで、facebook.comタブに戻ってログアウトしてください。アプリタブに行き、すべてのボタン(「ログイン」を除く)をクリックして、ブラウザコンソールの出力を確認します。
FB.logout
が呼び出されても何も起こりません。コールバックは決して呼び出されません。 Chromeで、次のエラーが表示されます。「URLがhttp://www.facebook.com/のフレームからURL http://my_app.comのフレームにアクセスしようとする安全でないJavaScriptの試み。ドメイン、プロトコル、ポートが一致している必要があります。FB.getLoginStatus
が呼び出されると、応答は「接続済み」となり、authResponseオブジェクトを持ちます。しかし、今は間違っているので、これは役に立ちません。代わりに、trueが "force"パラメータのために渡された場合、何も起こりません(コールバックは決して呼び出されません)。FB.getAuthResponse
が呼び出されると、何も起こりません(コールバックは呼び出されません)。これの間に関連するイベントは発生しません(Facebookのログアウト後)。
この場合、SDKからのユーザーのログインステータスを合法的に判断する方法がないように思われます。または私は愚かな何かをやっているが、私はそれを裸の最小限まで煮詰めた。
私の最終目標はここでは何かをできるようにすることです。ユーザーがすでにFacebookからログアウトしてからログアウトボタンをクリックした場合、この場合はです。しかし、SDKはこれを実現する実行可能な手段を提供しません。
アイデアや考えはありますか?誰かがこれを体験し、回避策を見つけましたか?ありがとう!
シンプルなアプリページ:すべての
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:fb='http://www.facebook.com/2008/fbml'>
<head>
</head>
<body>
<script>
window.fbAsyncInit = function() {
function subFBEvent(name) {
FB.Event.subscribe(name, function(r) {
console.log(name);
console.log(r);
});
}
subFBEvent('auth.login');
subFBEvent('auth.logout');
subFBEvent('auth.authResponseChange');
subFBEvent('auth.statusChange');
FB.init({
appId : 'MY_APP_ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth : true // use OAuth 2.0
});
};
(function() {
var s = document.createElement('div');
s.setAttribute('id','fb-root');
document.documentElement.getElementsByTagName("body")[0].appendChild(s);
var e = document.createElement('script');
e.src = 'http://connect.facebook.net/en_US/all.js';
e.async = true;
s.appendChild(e);
}());
</script>
<button onclick="FB.logout(function(r) { console.log('FB.logout'); console.log(r); });">Logout</button>
<button onclick="FB.getLoginStatus(function(r) { console.log('FB.getLoginStatus'); console.log(r); });">LoginStatus</button>
<button onclick="FB.getAuthResponse(function(r) { console.log('FB.getAuthResponse'); console.log(r); });">AuthResponse</button>
<fb:login-button>Login</fb:login-button>
</body>
のこのページを参照することができます。見てください http://stackoverflow.com/questions/9482876/how-to-detect-user-logging-out-of-facebook-after-logging-into-my-app/16227872#16227872 – Delmo