0

EDIT * * *Facebook PHP-SDK nicht ungesetzt SESSION wenn Benutzerberechtigungen Anwendung widerruft

Ich glaube, ich nicht genug erklärt habe/richtig, hier sind die Schritte, wenn ich das Problem mit die Sitzung:

1.- Benutzer-Logins mit JSSDK und akzeptiert meine App.

2.- Jetzt verwende ich das PHP-SDK um getUser(); und einige Seiten einschränken oder anzeigen.

3.- Der Benutzer wird nicht abgemeldet, widerruft aber die Berechtigungen direkt aus den Profileinstellungen.

4.- Der Benutzer kehrt zu meiner Anwendung zurück (ohne die Seite/den Browser natürlich zu schließen) und das PHP-SDK gibt getUser() als gültigen verbundenen Benutzer zurück!

5.- Wie soll meine Anwendung wissen, dass der Benutzer die Berechtigungen widerrufen hat, wenn das PHP-SDK angibt, dass die getUser() eine gültige ID ist?

Meine Benutzer anmelden, um meine Anwendung mit dem JS-SDK und den folgenden Code:

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

- und das ist das asynchrone Skript

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

Wenn jedoch die Benutzer entfernen die Anwendung aus ihren Datenschutzeinstellungen und versuchen, erneut auf meine Anwendung zugreifen, dieser Code gibt immer noch die Benutzer - ID $user = $facebook->getUser();

Ich habe die facebook.php aus dem PHP-SDK überprüft und es gibt eine Methode, die unset die SESSION ist, aber nichts deaktiviert.

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

Ist das ein Fehler? oder liest Facebook die Sitzung immer, selbst wenn der Benutzer die Berechtigungen der Anwendung widerrufen hat?

Ich denke, das Verhalten von $facebook->getUser(); sollte 0 ausgeben, wenn der Benutzer nicht mit der Anwendung verbunden ist, aber das ist natürlich nicht, was passiert.

Antwort

0

Sitzung und Erlaubnis über Facebook sind 2 verschiedene Dinge.

Eine Sitzung ist eine Anwendung und benutzerspezifisch für Ihren Code. Sie müssen diese Sitzung steuern.

Wenn jemand Berechtigungen für Ihre App widerruft, dann entfernt er alle Rechte in Facebook. Ihre App wird nur benachrichtigt, wenn Sie die richtigen Einstellungen in Ihrer Facebook App vorgenommen haben. Und selbst noch müssen Sie die Sitzung löschen.

Während also die Sitzung die Informationen enthält, die sie zuvor erhalten hat, erhalten Sie einen Fehler, wenn Sie versuchen, eine Verbindung herzustellen, um etwas auf Facebook mit den Berechtigungen auszuführen, die Sie zuvor hatten.

+0

Ich habe zusätzliche Informationen am Ende der Frage hinzugefügt, nur damit es besser erklärt wird. – Danny

+0

Meine Antwort bleibt gleich. Wenn jemand die Berechtigung widerruft, gibt es keine Möglichkeit zu wissen, dass Sie das JS SDK verwenden und eine aktuelle Sitzung läuft.Um dies zu bestätigen, müssen Sie eine Methode aufrufen, die eine Berechtigung für Facebook erfordert, und nach der abgelehnten Antwort suchen. –

Verwandte Themen