2012-04-05 5 views
2

Ich optimiere eine Seite, die FB-Authentifikation und Zugriffstoken verwendet hat, für eine Weile, um mit der Vernachlässigung von offline_access fertig zu werden und insbesondere fb_exchange_token, um Token mit längerer Dauer für die Benutzer der Site zu erhalten. Es scheint zu funktionieren, aber ich habe ein paar Fragen. Mein Ansatz ist:Re offline_access deprecation: Wann die fb_exchange_token Sache zu tun?

  • ich der Benutzer durch die üblichen Server-Seite angemeldet zurück und nach vorne Verfahren schließlich mir einen gültigen Zugriffstoken für den Benutzer zu geben. Dies funktioniert gut und scheint etwa 5300 Sekunden lang gültig zu sein, wie die Standard-/Original-Tokens.

  • Ich mache dann sofort den fb_exchange_token Aufruf; das gelingt und gibt mir ein neues access_token, das für ein paar Monate gut ist. Dies ist das Token, das meine Site für die zukünftige Verwendung speichert, wenn sie im Namen des Benutzers Aufgaben ausführt.

Das macht Sinn, oder? Es scheint ein wenig überflüssig zu sein, einen Anruf nach dem anderen zu machen, aber es bringt mir das Token mit der verlängerten Lebensdauer, was ich will. Ich nehme an, ich könnte den originalen Token so lange benutzen wie er ist und mich nicht um den Austausch kümmern, bis der ursprüngliche Token abläuft, aber (a) es scheint so, als könnte ich den erweiterten Token gleich von Anfang an benutzen und (b) Es ist mir nicht klar, dass ein abgelaufener Token gegen einen Token mit längerer Dauer getauscht werden kann.

Also: Sieht jemand Probleme mit diesem Ansatz? Vielen Dank!

Antwort

2

a) Ja, dieser Ansatz funktioniert gut. Ich mache das mit einigen meiner Apps.

b) Bitte beachten Sie den 3. Punkt in dieser FAQ. http://dominicminicoopers.blogspot.com/2012/03/facebook-access-tokens-and-offline.html

Kann ich meine 60 Tage Zugriffstoken für einen neuen 60 Tage Zugriffstoken austauschen?

Nein, tut mir leid, Sie können nicht. Sie können nur ein gültiges (dh aktuelles) Benutzerzugriffstoken für einen erweiterten Token austauschen. Sie können kein bereits erweitertes Token für den erweiterten Zugriff erweitern.

+0

Richtig. Aber wenn ich sicherstellen kann, dass der Benutzer sich irgendwann wieder einloggen muss, bevor das erweiterte Token abläuft, generiert er ein neues 5300-Sekunden-Token, das wiederum gegen ein anderes erweitertes Token ausgetauscht wird. Etc., usw., usw. Ich versuche nicht wirklich "offline" Sachen zu machen; Ich möchte nur, dass das Token nicht abläuft, während der Benutzer angemeldet ist und die Site verwendet. Und selbst wenn sie irgendwie über die Dauer des erweiterten Tokens hinaus angemeldet bleiben, habe ich immer noch den alten Code, um die ursprünglichen Tokens zu aktualisieren. Trotzdem danke! –

+0

Danke @DMCS für diesen FAQ-Link. So scheint es [die Dokumente] (https://developers.facebook.com/roadmap/offline-access-removal/) sind nicht nur verwirrend sondern auch falsch, wie ich _calling dies mehrmals am selben Tag nur in Der erste Anruf verlängert die Ablaufzeit_, was bedeutet, dass Sie sich einmal pro Tag verlängern können. IMO diese Änderung wird keine gute Erfahrung für mobile Clients liefern ... –

0

Funktioniert das noch für Leute ab dem 10. April? Ich habe gestern bemerkt, dass unsere Original-Token für 60 Tage nicht mehr gut waren und ich habe den fb_exchange_token-Aufruf implementiert. Aber die Antwort, die ich zurück bekommen, ist nach wie vor nur gut für etwa 2 Stunden .. Das bedeutet dies:

access_token = AAAEHLUxxx ... xx & abgelaufen = 4404

Ich habe das Android SDK wurde mit den Token zu erhalten und meine App hat die Berechtigung offline_access abgelehnt. Es funktionierte ungefähr eine Woche lang, alle Token waren 60 Tage lang gültig.

+0

In meiner heutigen Prüfung hat mein ursprüngliches Token einen Ablauf von 60 Tagen, und die Erweiterungsantwort ändert Token oder Ablaufdatum nicht. Aber ich werde versuchen, morgen und am nächsten Tag wieder zu verlängern, nur um zu sehen, was passiert. –

+0

Es funktioniert für mich am (11. April, 8:00 Uhr PDT; web-based/PHP) - das Token Ich bekomme ein Login ist ein "kurzes", aber ich kann es für ein "langes" austauschen. –

+0

Seltsam. Ich benutze den serverseitigen Fluss. Wenn ich die Migration für meine App aktiviere, hat das Zugriffstoken einen 60-tägigen Ablauf und der Aufruf der Erweiterungs-API ändert es nicht. Wenn ich die Migration für dieselbe App deaktiviere, hat das Zugriffstoken einen 6200-Sekunden-Ablauf, und der Aufruf der Erweiterungs-API ändert es auch nicht. –

1

Ich habe heute festgestellt, dass für die Erweiterung des Tokens das offline_token in den Programmeinstellungen deaktiviert werden muss. Ich habe den ganzen Tag mit dieser Einstellung versucht, die aktiviert wurde, und ich bekam nur Standard-2-Stunden-Token, sobald ich sie deaktivierte, und versuchte es erneut (nach erneuter Authentifizierung mit FB) erhielt ich einen 2-Monats-Token. Hofft, dies spart Menschen Zeit (die Dokumentation ist überhaupt nicht klar, haha).

+0

Guter Anruf hier. Ich wusste nicht, dass ich das erweiterte Token in meinen Einstellungen aktivieren musste. – Hawkee

0
$url = "https://graph.facebook.com/oauth/access_token?client_id=$client_id&client_secret=$client_secret&grant_type=fb_exchange_token&fb_exchange_token=$fb_access_token"; 
$graph = file_get_contents($url); 
$graph = explode("=", $graph); 
$graph = explode("&", $graph[1]); 
$new_access_token = $graph[0]; 
1

Warum nicht einfach so etwas tun (viel sauberer als all diese explodieren)?

$response = $this->facebook->api('/oauth/access_token', 'GET', array(
    'grant_type' => 'fb_exchange_token', 
    'client_id' => $app_id, 
    'client_secret' => $app_secret, 
    'fb_exchange_token' => $access_token 
)); 
parse_str($response, $output_array); 
$long_lived_access_token = $output_array['access_token']; 
$expires = $output_array['expires'];