Facebook JS SDKを使用してFacebookからユーザーをログアウトしようとしていますが、次のように呼び出します。
FB.logout(function(response){
console.log(response);
});
戻り値:response.status == "connected"
SDKは、ページを更新した後にのみ、セッションが終了したことを認識します。誰かがこの動作を引き起こしている可能性があることを知っていますか?このコードは以前は私のアプリケーションで機能しており、最近このように動作し始めました。
FireBugを使用した別の例:
https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a9645469 これは、修正されたJS SDKのバグであり、あまり長くはかからないはずです。
それまでは、次のことができます
FB.logout(function(response) {
FB.Auth.setAuthResponse(null, 'unknown');
...
});
http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html を参照してください
ログアウトすると、クロスドメインリクエストがFacebookに送信され、セッションが無効になります。リロードを押すと、別のリクエストがFacebookのサイトに送信されます。FBはCookieを無効であると認識するため、ブラウザからCookieを正しく削除します。
私はそれがfbm_ cookieを解析するのを忘れた方法の正規表現のバグだと思っています。この修正が適用されていないことに驚きました。
FB.logout(function(response) {
...
});
このFB.logoutメソッドは100%機能しています。問題は、ユーザーが、機能していないlocalhostから呼び出そうとしていることです。
サーバーから呼び出してみてください。
FBログアウトで何が起こっているのかを正確に調べるために多くの時間を費やしてきたので、他の人のためにここでそれを共有した方がいいと感じました。
まず、ドキュメントを読んでください here
人がFacebookにログインしてから、アプリにログインします。アプリからログアウトしても、そのユーザーは引き続きFacebookにログインしています。
この時点で、私の時間の90%が失われました。 facebook.comからログインして、アプリケーションのログインボタンをテストしようとすると、期待どおりに機能しましたが、ログアウトするとセッションが終了しませんでした。
解決策または修正:ドキュメントに記載されているシナリオに従って、アプリからログインが開始されていないため、ユーザーセッションは終了しませんfacebook.comからです。したがって、この場合、fbはセッションを終了しません。
Fbにログインすると、アプリから(ユーザー名とパスワードとして新規ログイン)、セッションのソース/トリガーがアプリと見なされます。そのため、ログアウト(window.FB.logoutまたはFB.logout)を実行すると、ユーザーセッションが完全に終了します。
アプリのログイン機能をテストする前に、facebook.comからログアウトしてください。
他に言及したように、以下のコードを使用してログアウトします
FB.logout(function(response) {
// response from logout will have authResponse with access_token so better to test the status as it will return "unknown"
if(response.status !== "connected") { } \\ do some check on the status of the login before considering successful logout.
});
最後に重要なことですが、ローカルホストからテストするには、FB APPの設定を更新してください
これは、ローカルホストからのテストで直面する問題を解決します
私も同様の問題に直面しました。ログアウト後にFB.getLoginStatus()
を使用しました。
FB.Logout()
が宣伝どおりに機能しないのと同じ経験があります。回避策として、以下のJavaScript関数を使用してユーザーがログインしているかどうかを確認し、ログインしている場合は、次のページのURLで https://www.facebook.com/logout.php にリダイレクトしますロードとそのアクセストークン:
function reallylogout() {
FB.getLoginStatus(function (response) {
if (response.authResponse) {
window.location = "https://www.facebook.com/logout.php?next=" +
'URL to redirect to' +
"&access_token=" + response.authResponse.accessToken;
} else {
$("#loginButtonDiv").show();
$("#logoutButtonDiv").hide();
}
});
}
表示/非表示ビットは、ログインおよびログアウトボタンが含まれているdivを表示または非表示にするための単なるjQueryです。ログアウトボタンのonclickは、reallyLogout()関数をトリガーします。
これは私のアプリで機能します。
asp.net mvcアプリケーションでは、次のようにしました。
<a href="javascript:void(0);" class="logOff">Log out</a>
$(function () {
$(".logOff").click(function () {
//check if logout is
FB.getLoginStatus(function (response) {
console.log('inside login status');
if (response.status === 'connected') {
// the user is logged in and has authenticated your
// app, and response.authResponse supplies
// the user's ID, a valid access token, a signed
// request, and the time the access token
// and signed request each expire
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
FB.logout(function (response) {
FB.Auth.setAuthResponse(null, 'unknown');
});
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook,
// but has not authenticated your app
} else {
// the user isn't logged in to Facebook.
console.log('response status not logged in');
}
});
window.location.href = '@Url.Action("LogOff", "Account")';
});
Facebookで壊れているようです。 FB rellではログインできますが、ログアウト機能は何もしません。 http://www.fbrell.com/auth/all-in-one
私はこれの解決策を見つけました:
ログアウトのためにonClickイベントを立てる<a>
このようなタグ
onclick="FB.logout(function() { document.location.reload(); });"
すべて一緒に:
<a href="#"
id="auth-logoutlink"
style="float:left;font-size: small;"
onclick="FB.logout(function() { document.location.reload(); });">
[logout]
</a>