webentwicklung-frage-antwort-db.com.de

FB.logout () ohne Zugriffstoken aufgerufen

Ich versuche mich von einer Website abzumelden, die ich mit integriertem Facebook erstellt habe. Die Anmeldung funktioniert einwandfrei, aber wenn ich mich von Firebug abmelden möchte, erhalte ich immer den folgenden Fehler:

FB.logout() ohne Zugriffstoken aufgerufen.

Ich verwende das Facebook JavaScript SDK und der Code, den ich zum Abmelden habe, sieht folgendermaßen aus:

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

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

Dies ist der Abmeldecode, der in der Facebook Developers Documentation angegeben ist, wobei einem Button die Methode für document.ready zugewiesen wurde

Vor diesem Code habe ich die FB.init() -Methode, die alles gut läuft.

Wenn jemand eine Lösung dafür findet, warum FB.logout kein Zugriffstoken hat, ist dies sehr zu begrüßen.

32
martinthebeardy

Um sich von der Anwendung abzumelden, die die Facebook-Grafik-API verwendet, verwenden Sie dieses JavaScript auf der Abmeldeseite direkt nach dem <form> Etikett:

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);
}

Der Code funktioniert und ist live auf meiner Seite.

19
Balaji Birajdar

Ich entschied mich für die weniger triviale Lösung:

    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

Ich habe so etwas ausprobiert:

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;  
}

Sollte etwas ähnlicher sein. Es wurde eine Änderung an der JS-API vorgenommen, bei der Sie authResponse anstelle von nur session verwenden müssen.

//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

Der Fehler besagt, dass Sie kein Zugriffstoken haben. Sie müssen mit der Funktion FB.getAccessToken () nach einem Token suchen.

Wenn kein Zugriffstoken vorhanden ist, gibt die Funktion null zurück. Siehe folgendes Beispiel:

   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ță

Hat es nach so vielen Versuchen herausgefunden. Tatsächlich übergeben wir response an FB.logout.

Allgemein response.authResponse.accessToken enthält Token. Es ist also ein Fehler, dass das accessToken nicht vorhanden ist.

Überlegen Sie logisch, woher diese Antwort in Ihrem Code kommt. Aus dem Nichts.

Also müssen wir dieses Antwortobjekt von einer Funktion abrufen und an die Abmeldefunktion übergeben. Ich weiß nicht, wie es bei anderen funktioniert hat, aber das hat bei mir funktioniert.

Ersetzen Sie einfach den Code durch diesen

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

Was wir hier tun, ist, den Anmeldestatus zu erhalten, wenn der Benutzer angemeldet ist, und im Gegenzug die entsprechende Antwort zu erhalten, die alle erforderlichen Token und Daten enthält. Und dann übergeben wir diese Antwort an die Abmeldefunktion.

1
Sumit Badsara