2010-04-30 6 views
5

Quando un utente visita il mio sito che contiene una app per Facebook la prima volta, gli richiede di consentirlo e gli viene chiesto di farlo, quindi ottengo il codice che posso convertire in un access_token. Fin qui tutto bene.Facebook access_token: come ottenerlo una volta che l'utente ha accettato la mia app?

Ma come ottengo il token una volta che l'utente ha già visitato il sito? Finché questo token è attivo la prima volta è attivo, tutto va bene. Ma come ottengo un altro token quando l'utente ha già autorizzato l'app una settimana fa e sta visitando di nuovo la mia pagina?

+0

Stai cercando in una lingua particolare? – Steve

risposta

0

Uso il metodo cookie per memorizzare access_token sul computer dell'utente.

FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true}); 

Nel file facebook.php è necessario impostare cookieSupport true allora:

private $cookieSupport = true; 

Oppure utilizzare la funzione get_facebook_cookie trovato qui: Single sign-on with the JavaScript SDK

L'access_token viene poi conservato in un cookie chiamato "fbs_APPID" (con scadenza). Se vuoi che il cookie duri più di un paio d'ore devi chiedere l'autorizzazione estesa 'offline_access':

Consente all'applicazione di eseguire richieste autorizzate per conto dell'utente in qualsiasi momento. Per impostazione predefinita, la maggior parte dei token di accesso scade dopo un breve periodo di tempo per garantire che le applicazioni eseguano solo richieste per conto dell'utente quando utilizzano attivamente l'applicazione. Questa autorizzazione rende il token di accesso restituito dal nostro endpoint OAuth a lungo termine.

+0

Quindi l'unico modo per riconoscere un utente è salvare il token in un cookie? – hoktar

+0

Se si ispeziona la funzione getSession() all'interno di facebook.php, si nota che costruisce la sessione da $ _GET o $ _COOKIE. – Jens

-2

usando php

session_start(); 
// Create our Application instance. 
$facebook = new Facebook(array(
       'appId' => FACEBOOK_APP_ID, 
       'secret' => FACEBOOK_APP_SECRET, 
       'cookie' => true, 
       'domain' => 'example.com' 

)); 

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
     $uid = $facebook->getUser(); 
     $me = $facebook->api('/me'); 
     $_SESSION['me'] = $me; 
     $_SESSION['uid'] = $uid; 
     $_SESSION['session'] = $session; 

    } catch (FacebookApiException $e) { 
     error_log($e); 
    } 
} 

è possibile fare riferimento al access_token tramite $ _SESSION [ 'session'] [ 'access_token'] all'interno della vostra app ,, per maggiori Theres tutorial oltre a fbdevtutorials.com

4

Ora che Facebook sta migrando a Oauth2, il cookie creato da Javascript è diverso. Ho avuto modo di lavorare per me e l'ho aggiunto a un fork del plugin FGraph per Rails - https://github.com/imme5150/fgraph

Uno dei trucchi è che quando si richiede il token di accesso dal parametro "codice" memorizzato nel cookie, è necessario passa in "redirect_uri", ma vuoi che sia vuoto.

3

Sul flusso lato client, è possibile reindirizzare l'utente alla finestra di dialogo OAuth con le autorizzazioni nel parametro scope. Se l'utente ha già accettato l'app e le autorizzazioni, verrà reindirizzato al tuo "redirect_uri" con access_token nel frammento URI, altrimenti le autorizzazioni necessarie saranno immediate.

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream&response_type=token 

Sul lato server flusso si dovrebbe avere il "codice", così si può riscattare per un access_token sull'endpoint OAuth:

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URLclient_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE 

Documentazione: https://developers.facebook.com/docs/authentication/