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?
@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% 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();
// 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 *
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:
$facebook->getAccessToken();
aufrufen, bekommen Sie nur dasselbe Token zurück, aber sein Ablauf hat sich geändert? 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.
Tags und Links php facebook-php-sdk