6

Ich versuche, Facebook zu verwenden, um Benutzer zu authentifizieren. Es funktioniert gut außer für Ajax-Anrufe. Die meisten der Zeit senden es nur alte Token und ich bekomme:Benutzer kann nicht in Facebook JS SDK autorisiert werden: "Dieser Autorisierungscode wurde verwendet." oder wie man ein neues Autorisierungs-Token bekommt?

{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}} 

Also, was ich versuchte, tut jede Ajax-Aufruf Umwickeln mit

FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
      return fn(); 
      ... 

dies nicht funktionierte, so habe ich hinzugefügt: wahr Parameter zu getLoginStatus, um Zwischenspeichern zu verhindern:

FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
      console.log('connected'); 
      fn(); 
     } else if (response.status === 'not_authorized') { 
      console.log('not_authorized); 
     } else { 
      console.log('not_logged_in'); 
     } 
    },true); 

Großartig! Außer es ist furchtbar langsam. Mache ich etwas falsch? Kann ich nach jeder Aktion ein neues Token erhalten, so muss ich nicht vor dem nächsten warten?

Dank W

Antwort

15

Hier ist, was Facebook sagt:

„Neue Sicherheitseinschränkungen für OAuth Autorisierungscodes Wir werden nur Berechtigungscodes erlauben einmal für Zugriffstoken ausgetauscht werden und wird verlangen, dass sie ausgetauscht werden. für ein Zugriffs-Token innerhalb von 10 Minuten nach ihrer Erstellung. Dies steht im Einklang mit der OAuth 2.0-Spezifikation, die von Anfang an festgelegt hat, dass "Autorisierungscodes kurzlebig und einmalig sein müssen." Weitere Informationen finden Sie in unserer Authentifizierungsdokumentation.

Die Art und Weise, um dies ist die Erweiterung Ihrer Zugriffstoken api zu verwenden:

https://developers.facebook.com/docs/howtos/login/extending-tokens/

+0

ich das verstehen. Aber gibt es eine Möglichkeit, automatisch neuen Code zu bekommen? Würde das JS SDK nicht für häufige Ajax-Aufrufe unbrauchbar machen, wenn ich vor jedem Aufruf ein neues Token bekommen müsste? Gibt es dafür eine Lösung, außer den Benutzer auf der Serverseite zu erstellen und ihn in die Sitzung zu integrieren? – wonglik

+0

Ahh, ja:) - Sie müssen Ihre Zugriffstoken zu erweitern https://developers.facebook.com/docs/howtos/login/extending-tokens/ – dacopenhagen

+0

Können Sie die Quelle der Facebook-Antwort verknüpfen? – rocketspacer