2012-04-06 11 views
4

Unter Code gibt mir eine 'undefiniert' auf den Namen und E-Mail. Aber der Benutzer ist angemeldet, weil ich das Zugriffs-Token und die UID habe?fb.api gibt 'undefined' auf verbundenen Benutzer zurück

function getToken(){ 
    FB.login(function(response) { 
     if (response.authResponse) { 
      var access_token = response.authResponse.accessToken; 
      var uid = response.authResponse.userID; 
      document.getElementById('accessToken').value=access_token; 
      document.getElementById('uid').value=uid; 
      FB.api('/me', function(response) { 
       console.log('Good to see you, ' + response.name + '.' +response.email); 
      }); 
      document.forms['token'].submit(); 
     } else { 
      return false; 
     } 
    }, {scope:'email,user_likes,friends_likes'}); 
} 

Als ich die vollständige Antwort von fb.api Ausgang I

[11:46:10.369] ({error:"load-error: unknown"}) 
+0

Können Sie versuchen, nur die gesamte Antwort einzuloggen und es hier zu veröffentlichen, damit wir wissen, was mit Facebook reagieren? Etwas wie: * console.log (Antwort); * –

+0

- [11: 46: 10.369] ({Fehler: "load-Fehler: unbekannt"}) –

+0

Zum ersten Mal sehe ich diese Art von Fehler. Kannst du vielleicht einen einfacheren Ablauf ausprobieren? rufen Sie einfach zur Anmeldung auf, dann im Callback einfach nach der * authResponse * suchen und falls es existiert, rufen Sie die * FB.api * mit */me * auf und protokollieren Sie dann einfach die Antwort. Entfernen Sie den anderen Code, insbesondere das Formular zum Senden. Dann posten Sie bitte hier die Antworten, die Sie von fb für die Anmeldung und */mich * Anfragen erhalten. –

Antwort

1

jetzt bekommen zu trösten Ich sehe, was Sie zu tun, und das Problem versuchen.

Warum es nicht:

Sie sind eine asynchrone Anforderung zu machen (mit der FB.api-Methode) und dann ein Formular einreichen (und es ist eine Vermutung, da Sie nicht die gesamten Code enthalten sind), die die gesamte nachlädt Seite, mit der asynchronen Anfrage zu vermasseln.

Was, wie das Problem zu lösen:

Die beste Lösung, meiner Meinung nach, ist die Server-Side authentication process zu verwenden und nur dann, danach, wenn die Leinwand Lasten verwenden, um die Client-Seite sdk. Auf diese Weise haben Sie Zugangstoken sowohl auf der Client- als auch auf der Serverseite.

Ein weiterer Ansatz ist nicht das Formular abzuschicken, aber einen Ajax-Request an den Server (es kann in POST sein) mit dem Zugriffstoken zu erteilen, da sowohl die Anforderungen asynchron sein werden (FB.api und derjenige zu deinem Server) sollte alles in Ordnung sein.

0

Ich denke, eine schnelle Lösung würde das Formular innerhalb der Funktion FB.api senden. es würde also wie folgt aussehen:

FB.api('/me', function(response) { 
      console.log('Good to see you, ' + response.name + '.' +response.email); 
      document.forms['token'].submit(); 
}); 
Verwandte Themen