SocialConnect - Facebook API-Verständnis

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Da ich ein nachtaktiver Mensch bin (:P) hab ich die aktuelle Version hochgeladen. Diese beinhaltet die fertige Registrierung per Klick und eine Sicherheitsmaßnahme im Keks. Automatisch auszufüllende Felder (Registrierung) wird dennoch als Zusatzpaket erscheinen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gnex ()

  • Moin Moin,

    ich habe eben gerade ein Problem festgestellt, als ich die Single-Klick-Registrierung in OpenID einpflegen wollte:

    Quellcode

    1. UserAuthOpenID::loadInstance();


    bzw.

    Quellcode

    1. UserAuthFacebook::loadInstance();



    heben sich gegenseitig auf. Bedeutet: Entweder OpenID oder facebook, beides ist anscheinend (?) nicht möglich? Stehe gerade ein wneig auf dem Schlauch ...
  • sieht nach einem Fehler bei der OpenID Implementierung aus, den du für Facebook übernommen hast.
    Es darf nur einen Login Handler geben - und dieser darf nur instantiiert werden, wenn sichergestellt ist, dass er den Login handeln kann.

    Hier ein komplettes Beispiel:

    Quellcode

    1. <?php
    2. class EventHandler {
    3. public static function fireAction($eventObj, $eventName) {
    4. A::$eventName();
    5. B::$eventName();
    6. }
    7. }
    8. class UserAuth {
    9. protected static $instance = null;
    10. public static function getInstance() {
    11. if (self::$instance === null) {
    12. EventHandler::fireAction('UserAuth', 'loadInstance');
    13. if (self::$instance === null) self::$instance = new self();
    14. }
    15. return self::$instance;
    16. }
    17. }
    18. class A extends UserAuth {
    19. public static function loadInstance() {
    20. if (self::$instance === null && self::isResponsible()) self::$instance = new self();
    21. }
    22. protected static function isResponsible() {
    23. return (isset($_COOKIE[COOKIE_PREFIX.'userID']) && isset($_COOKIE[COOKIE_PREFIX.'facebookIdentifier']));
    24. }
    25. }
    26. class B extends UserAuth {
    27. public static function loadInstance() {
    28. if (self::$instance === null && self::isResponsible()) self::$instance = new self();
    29. }
    30. protected static function isResponsible() {
    31. return (isset($_COOKIE[COOKIE_PREFIX.'userID']) && isset($_COOKIE[COOKIE_PREFIX.'openIDIdentifier']));
    32. }
    33. }
    34. var_dump(UserAuth::getInstance());
    35. ?>
    Alles anzeigen


    Würde "isResponsible" beidesmale true returnen, dann würde niemals B Instantiiert werden.
  • Danke für deine Antwort :)
    Leider funktioniert OpenID dadurch immer noch nicht. OpenID wäre in deinem Beispiel A.


    // Edit: Das ganze läuft unter GPL-Lizenz (Für die, die es interessiert) ;)

    // Edit: der eine oder andere wird es bemerkt haben: Es gibt zwei Zusatzpakete, aber das nur am Rande.
    In der Action ist zur Zeit eine Abfrage (users.isAppUser) enthalten, um Doppelregistrierungen zu vermeiden. Das ganze ist aber Blödsinn, da man die Verbindung - bevor man zu Action geleitet wird - immer bestätigen muss. Hab ich nen Denkfehler oder gibts ne andere Möglichkeit?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gnex ()

  • Wo ist denn überhaupt das Problem?

    Also zum einen kann man die FacebookLoginAction auch manuell im Browser aufrufen, daher ist nicht entscheidend wo der Benutzer vorher war.
    Dann existieren folgende Abfragen

    $this->facebookID = $this->facebook->get_loggedin_user();
    Damit überprüfst du wohl ob der Facebook Benutzer angemeldet ist.

    if(($this->user = UserAuth::getInstance()->loginManuallyFacebook($this->facebookID)) == false) {
    Damit überprüfst du ob du den Benutzer schon automatisch einloggen kanst.

    if($this->facebook->api_client->users_isAppUser($this->facebookID) == false) {
    Damit überprüfst du ob der Benutzer deine Facebook App noch in seinem Profil hat. (Sonst bekommt er keine E-Mails und du hast keinen Zugriff mehr)

    Es ist also alles notwendig und es funktioniert. (oder?)
  • Hi,

    eben nicht; ich störe mich an der letzten Zeile:

    if($this->facebook->api_client->users_isAppUser($this->facebookID) == false) {


    Durch diese Zeile ist keine automatische Registrierung möglich (Single-Klick), weil der Benutzer immer erst eine Verbindung zur App bestätigen muss und somit immer App-User ist.