6

Sto cercando di utilizzare Facebook per autenticare gli utenti. Funziona bene tranne che per le chiamate Ajax. La maggior parte delle volte è semplicemente inviare vecchio token e ottengo:Impossibile autorizzare l'utente in Facebook JS SDK: "Questo codice di autorizzazione è stato utilizzato." o come ottenere un nuovo token di autorizzazione?

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

Così che cosa ho provato a fare è avvolgere ogni chiamata AJAX con

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

questo non ha funzionato così ho aggiunto: vero come parametro per getLoginStatus per impedire la memorizzazione nella cache:

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); 

Grande! Tranne che è terribilmente lento. Sto facendo qualcosa di sbagliato? Posso ottenere un nuovo gettone dopo ogni azione, quindi non devo aspettare prima di quello successivo?

Grazie W

risposta

15

Ecco cosa Facebook dice:

"restrizioni di sicurezza di nuovo per i codici di autorizzazione OAuth Saremo consentire solo i codici di autorizzazione per essere scambiati per i token di accesso una volta e richiederà che siano scambiati. per un token di accesso entro 10 minuti dalla loro creazione, in linea con la specifica OAuth 2.0, che sin dall'inizio ha dichiarato che "i codici di autorizzazione DEVONO essere di breve durata e monouso" .Per ulteriori informazioni, consultare la nostra documentazione di autenticazione

Il modo per aggirare questo è quello di utilizzare l'estensione tuo token di accesso api:

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

+0

lo capisco. Ma c'è un'opzione per ottenere automaticamente il nuovo codice? Questo non renderebbe l'SDK JS inutilizzabile per le chiamate frequenti ajax se ho bisogno di ottenere un nuovo token prima di ogni chiamata? C'è una soluzione per questo tranne la creazione di utenti sul lato server e metterlo in sessione? – wonglik

+0

Ah, sì:) - Devi estendere i tuoi token di accesso https://developers.facebook.com/docs/howtos/login/extending-tokens/ – dacopenhagen

+0

Puoi collegarti alla fonte della risposta di facebook? – rocketspacer