Das Erhalten des langlebigen Zugriffstokens mit setExtendedAccessToken () gibt ein kurzlebiges Token zurück

8

Ich versuche, das langlebige Zugriffs-Token mit

zu erhalten %Vor%

Nachdem ich SDK gesucht habe, habe ich festgestellt, dass die Funktion setExtendedAccessToken () das langlebige Zugriffstoken in

setzt %Vor%

mit

%Vor%

und getAccessToken () gibt ein kurzlebiges Zugriffstoken von

zurück %Vor%

Also, was ist der Zweck von setExtendedAccessToken (), da es nichts zurückgibt?

    
user1633755 30.08.2012, 12:34
quelle

2 Antworten

12

@Julian. Vielen Dank für die Inspiration hier. Ich war in der Lage, dies zu tun, ohne irgendwelche Kern-FB-API-Dateien zu ändern.

Was passiert, ist, dass der Aufruf setExtendedAccessToken den Wert an setPersistentData sendet, der ihn dann über constructSessionVariableName in die Sitzung sendet.

Wenn wir also die Sitzung beenden und sie dann auf das Facebook-Objekt setzen, sind wir fertig.

Hier ist mein Code:

%Vor%     
writemcodeboy 05.11.2012, 00:19
quelle
5

Nachdem ich versucht habe, base_facebook.php zu durchsuchen, habe ich folgendes entdeckt:

  • setExtendedAccessToken(); tauscht ein kurzlebiges Zugriffstoken aus und Facebook gibt ein korrektes Token mit erweitertem Zugriff zurück.
  • setExtendedAccessToken(); speichert dies im persistenten Daten-Cache, dies bedeutet jedoch nicht, dass getAccessToken(); darauf zugreifen kann, weil getAccessToken(); den persistenten Cache nicht abfragt. Darüber hinaus scheint die Klasse die persistenten Daten als "ausfallsicher" zu behandeln und verwendet sie nur, wenn alle anderen Versuche zum Abrufen von Daten fehlgeschlagen sind (d. H. Nach dem Überprüfen von signed_request und dem Analysieren von code ).
  • In unserem Fall ist das Zugriffstoken, das über setExtendedAccessToken(); zurückgegeben wurde, das letzte Zugriffstoken, also habe ich einen Fix gehackt. Fügen Sie am unteren Rand von setExtendedAccessToken();

    die folgende Zeile hinzu

    // Also set the publically accessible access token value to this new extended token

    $this->accessToken = $response_params['access_token'];

  • Vorbehalt : Auch wenn wir jetzt das neue erweiterte Zugriffstoken haben, werden nachfolgende Abfragen an Facebook, um ein Zugriffstoken (z. B. nach einer Seitenaktualisierung) abzurufen, die gleichen alten kurzlebigen zurückgeben Zugangstoken. * facepalm *

  • Auch wenn sich der Benutzer abmeldet (wodurch das kurzlebige Token abläuft) und sich erneut anmeldet, gibt Facebook erneut ein kurzlebiges Zugriffstoken zurück.
  • Auch wenn dies der Fall ist, wird setExtendedAccessToken(); das gleiche erweiterte Zugriffstoken zurückgeben, das Sie zuvor abgerufen haben. Dieses Token kann weiterhin verwendet werden, um Benutzerinformationen abzufragen.

Also, das sieht nach einem Facebook-Bug aus, genauso wie ich es hasse, es zu sagen. Wir können es mit dem Hack, den ich oben beschrieben habe, umgehen, und alle nachfolgenden Aufrufe zum Abrufen eines Zugriffstokens werden nur ein kurzlebiges Zugriffstoken zurückgeben, das für dasselbe erweiterte Zugriffstoken immer wieder ausgetauscht werden kann.

Ursprüngliche Antwort

Laut dieser Antwort wird das neue Zugriffstoken in den persistenten Daten gespeichert (wie Sie es auch in Ihrem Frage) und kann über $facebook->getAccessToken(); erreicht werden.

Zwei wichtige Hinweise:

  • Diese Seite erwähnt auch, dass, wenn das kurzlebige Zugriffstoken gegen ein Token mit erweitertem Zugriff ausgetauscht wird Token selbst kann oder darf nicht geändert werden , obwohl die Ablaufzeit aktualisiert sein sollte, um den längeren Ablaufzeitpunkt widerzuspiegeln. Vielleicht, wenn Sie $facebook->getAccessToken(); aufrufen, bekommen Sie nur dasselbe Token zurück, aber sein Ablauf hat sich geändert?
  • Der Aufruf, ein kurzlebiges Zugriffs-Token gegen ein erweitertes Zugriffs-Token auszutauschen, kann nur einmal pro Benutzer gemacht werden. Ich weiß nicht, warum das so ist, und ich weiß nicht, ob dieser Zähler zurückgesetzt wird, wenn ein Benutzer sich entscheidet, Ihre App zu entmächtigen und sich erneut zu autorisieren.

Aus der Facebook-Dokumentation:

  

Wenn ein Benutzer Ihre Site mit einem vorhandenen, gültigen, kurzlebigen user access_token besucht, haben Sie die Möglichkeit, die Ablaufzeit dieses Zugriffstokens zu verlängern. Unsere Plattform verlängert die Ablaufzeit nur einmal pro Tag . Selbst wenn ein Nutzer Ihre Website mehrmals am Tag erneuert, wird der Token bei der ersten Anfrage verlängert. (Hervorhebung von mir)

Ich glaube, dass dies der Fall ist, weil schlampige Programmierer $facebook->setExtendedAccessToken(); bei jeder möglichen Gelegenheit aufrufen, in der Hoffnung, immer ein erweitertes Zugriffstoken zu erhalten. (Anstelle des bevorzugten Verhaltens, das nur $facebook->setExtendedAccessToken(); aufrufen würde, wenn es sich um ein kurzlebiges Zugriffs-Token handelt - wie würden Sie das sagen, wenn Sie das Ablaufdatum nicht gespeichert haben , das an und für sich ist nicht so zuverlässig ...!)

Ich gehe davon aus, dass das Limit zurückgesetzt wird, wenn ein Benutzer die App ent Autorisierung oder das Token anderweitig ungültig macht, und Sie können erneut ein Token mit erweitertem Zugriff abrufen, wenn Sie ein kurzlebiges Zugriffstoken übergeben. Dies erfordert jedoch weitere Tests, also nehmen Sie bitte diesen Absatz mit einem Körnchen Salz.

    
Julian H. Lam 28.09.2012 13:23
quelle

Tags und Links