web-dev-qa-db-ja.com

FB.logout()がアクセストークンなしで呼び出されました

Facebookを統合して作成したWebサイトからログアウトしようとしています。ログインは正常に動作しますが、Firebugからログアウトしたい場合は常にこのエラーが表示されます。

FB.logout()はアクセストークンなしで呼び出されます。

Facebook JavaScript SDKを使用しています。ログアウトする必要があるコードは次のようになります。

_$(document).ready($(function () {
    $("#fblogout").click(facebooklogout);
}));

function facebooklogout() {
    FB.logout(function (response) {
    }
)};
_

これは、 Facebook Developers Documentation で指定されたログアウトコードであり、document.readyのメソッドがボタンに割り当てられています。

このコードの前にFB.init()メソッドがあり、すべて正常に実行されます。

FB.logoutにアクセストークンがない理由について誰かが解決策を見つけた場合は、感謝します。

32
martinthebeardy

Facebook graph APIを使用するアプリケーションからログアウトするには、ログアウトページで<form>タグの直後にある次のJavaScriptを使用します。

window.onload=function()
{
    // initialize the library with your Facebook API key
    FB.init({ apiKey: 'b65c1efa72f570xxxxxxxxxxxxxxxxx' });

    //Fetch the status so that we can log out.
    //You must have the login status before you can logout,
    //and if you authenticated via oAuth (server side), this is necessary.
    //If you logged in via the JavaScript SDK, you can simply call FB.logout()
    //once the login status is fetched, call handleSessionResponse
    FB.getLoginStatus(handleSessionResponse);
}

//handle a session response from any of the auth related calls
function handleSessionResponse(response) {
    //if we dont have a session (which means the user has been logged out, redirect the user)
    if (!response.session) {
        window.location = "/mysite/Login.aspx";
        return;
    }

    //if we do have a non-null response.session, call FB.logout(),
    //the JS method will log the user out of Facebook and remove any authorization cookies
    FB.logout(handleSessionResponse);
}

コードは機能し、私のサイトで公開されています。

19
Balaji Birajdar

私はそれほどささいな解決策に行きました:

    function facebookLogout(){
        FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {
                FB.logout(function(response) {
                    // this part just clears the $_SESSION var
                    // replace with your own code
                    $.post("/logout").done(function() {
                        $('#status').html('<p>Logged out.</p>');
                    });
                });
            }
        });
    }
12
Ozzy

私はこのようなことを試しました:

function fbLogout(){
    if(typeof FB.logout == 'function'){
        if (FB.getAuthResponse()) {
         FB.logout(function(response) { window.location.href = PROJECT_PATH + '/index/logout'; }); 
         return;
        }  
    };

    window.location.href = PROJECT_PATH + '/index/logout'; 
    return;  
}

もっとこのようなものでなければなりません。セッションだけでなくauthResponseを使用する必要があるJS APIに変更がありました。

//handle a session response from any of the auth related calls
function handleSessionResponse(response) {

    //if we dont have a session (which means the user has been logged out, redirect the user)
    if (!response.authResponse) {
        return;
    }

    //if we do have a non-null response.session, call FB.logout(),
    //the JS method will log the user out of Facebook and remove any authorization cookies
    FB.logout(response.authResponse);
}
3
Eric Novins

エラーには、アクセストークンがないため、FB.getAccessToken()関数を使用してアクセストークンを確認する必要があることが示されています。

アクセストークンがない場合、関数はnullを返します。以下の例を参照してください。

   function facebooklogout() {
    try {
        if (FB.getAccessToken() != null) {
            FB.logout(function(response) {
                // user is now logged out from facebook do your post request or just redirect
                window.location.replace(href);
            });
        } else {
            // user is not logged in with facebook, maybe with something else
            window.location.replace(href);
        }
    } catch (err) {
        // any errors just logout
        window.location.replace(href);
    }
   }
2
Mihai Crăiță

何度も試してみて、それを考え出した。実際、responseをFB.logoutに渡します。

一般的にresponse.authResponse.accessTokenにはトークンが含まれます。そのため、accessTokenに関するエラーは存在しません。

論理的に考えると、その応答はコードのどこから来ているのでしょうか?どこからともなく。

そのため、関数からその応答オブジェクトを取得し、ログアウト関数に渡す必要があります。他の人にどのように機能したかはわかりませんが、これは私には機能しました。

コードをこれに置き換えるだけ

function logout(){
  FB.getLoginStatus(function(response) {
    FB.logout(function(response){
      console.log("Logged Out!");
      window.location = "/";
    });
  });
}

ここでは、ユーザーがログインしている場合にログインステータスを取得し、それに対応する応答を取得します。これには、必要なすべてのトークンとデータが含まれています。そして、この応答をログアウト機能に渡します。

1
Sumit Badsara