2010-04-24 2 views
12

Sto tentando di utilizzare la nuova API Graph di Facebook recentemente rilasciata, ma non riesco a far funzionare correttamente.Facebook access_token non valido?

Ho passato attraverso i passi, e dopo la chiamata/autorizzazione, ricevo un access_token:

access_token=109002049121898|nhKwSTJVPbUZ5JYyIH3opCBQMf8. 

Quando tento di usare quel segno ottengo:

{ 
    "error": { 
     "type": "QueryParseException", 
     "message": "An active access token must be used to query information about the current user." 
    } 
} 

I' m perplesso come troppo perché ...

-AC

+1

Questo 'access_token' non mi sembra completo. Di solito sono molto più lunghi di quello che hai mostrato. Forse il tuo codice che sta analizzando access_token dall'URL è buggato? –

risposta

7

stessa cosa qui. Ho seguito Ben Biddington blog per ottenere il token di accesso. Lo stesso errore quando si tenta di usarlo. L'implementazione di OAuth di Facebook non segue completamente le specifiche, ci sto bene finché il documento è chiaro, che ovviamente non è il caso qui. Inoltre, sarebbe bello se l'userid e il nome utente venissero restituiti con il token di accesso.

+3

update, sembra che abbiano risolto il problema. NON aggiungere il parametro type. Inoltre assicurati che redirect_uri sia identico quando fai chiamate authroize e access_token. – JiJ

+0

Originariamente volevo la mia stessa attuazione contro i loro OAuth (e anche Twitter) per il controllo e le prestazioni, ma ho iniziato a pensarci due volte. Diversi fornitori (ad esempio, twitter e facebook) offrono un'implementazione leggermente diversa, inoltre, oauth1/oauth2/ssl e le nuove funzionalità social richiedono uno sforzo significativo per tenere il passo con i cambiamenti e le novità. Per Facebook, basta usare la loro API Javascript Social Gaph, per Twitter, basta usare @Anywhere api. Probabilmente qualche sovraccarico sul caricamento della pagina, ma dovrebbe essere accettabile nella maggior parte dei casi. Posso dormire meglio – JiJ

+1

up-voting per "assicurati che redirect_uri sia identico quando fai il richiamo di authroize e access_token". questo ha risolto il mio problema. finalmente posso smettere di tirare fuori i miei capelli che "type = client_cred" rende solo le cose peggiori. – nategood

4

Giusto per chiarire - dopo aver chiamato

https://graph.facebook.com/oauth/authorize? 

si dovrebbe ricevere un codice che, in combinazione con il CLIENT_ID e CLIENT_SECRET (supponendo che hai registrato il tuo applicazione) può essere scambiato per un access_token a

https://graph.facebook.com/oauth/access_token? 

Se questo è davvero come sei venuto dal tuo ACCESS_TOKEN, dovresti quindi essere in grado di richiedere

https://graph.facebook.com/me/ 
+0

questo è quello che sta chiedendo, sta ricevendo errore QueryParseException dal server! – Cem

+1

Corretto, ecco come ottengo il token di accesso - ma quando provo a premere https://graph.facebook.com/me/?access_token=foo ottengo QueryParseException ... Inoltre, il token di accesso che sto ottenendo non avere il parametro & exp, potrebbe avere qualcosa a che fare con esso ... –

+0

Sto lottando esattamente la stessa cosa qui, se trovi una soluzione per favore tienimi aggiornato. – Cem

0

Ho avuto lo stesso identico problema. Un paio di cose che ho fatto per risolvere il problema:

  1. provare tutto fuori nel browser prima per assicurarsi che gli URL siano corretti in ogni fase
  2. Assicurarsi che l'URL di reindirizzamento è identica, non solo equivalente. Parametri nello stesso ordine, codifica dello stesso
  3. Non utilizzare il tipo = client_cred, o qualsiasi altra cosa per quella materia
  4. Codificare qualsiasi e commerciale nella redirect_url (ma non il resto dell'URL) ad es. http://example.com/fb?foo=234%26bar=567. Questo mi ha causato la maggior parte dei problemi. Quando è stata eseguita la pagina di callback, è stata inclusa solo l'url prima della prima e commerciale, poiché si riteneva che la e commerciale facesse parte dell'URL per graph.facebook.com, non parte di redirect_url. Stavo quindi ottenendo i valori da querystring per inserire redirect_url per la seconda chiamata, ma non c'erano. Una volta che ho codificato la e commerciale, sono apparsi correttamente.
  5. non hanno alcun valori vuoti in te codificati parametri querystring (ad esempio? Foo =% 26bar = 123)
0

voglio sottolineare ciò che è sorta di stato detto sul blog di Ben Biddington, e quello che ho notato dall'osservazione del "token" malformato nella domanda iniziale. Altri hanno detto cose simili in questo thread, ma io voglio essere esplicito.

Il token non è effettivamente malformato, ma piuttosto un token che consente di eseguire azioni per conto dell'app, non dell'utente. Questo è il token che utilizzeresti se volessi ottenere tutti gli utenti dell'app o visualizzare le statistiche per la tua app, ecc., Con le richieste in genere provenienti dal tuo server, non dal client.Questo tipo di token si ottiene utilizzando il parametro type = client_cred. Se si vuole fare le cose sul conto dell'utente, non specificare type = client_cred, e assicurarsi di specificare i seguenti parametri nella chiamata a http://graph.facebook.com/oauth/access_token:

'client_id' => APP_ID 
'redirect_uri' => REDIRECT_URI 
'client_secret' => APP_SECRET 
'code' => $_GET['code'] 

Ho scritto questo come coppie chiave-valore di un array PHP, ma penso che tu abbia capito il punto. Il valore di ottenere il codice è maturata dopo aver effettuato la chiamata iniziale per http://graph.facebook.com/oauth/authorize con i seguenti parametri:

'client_id' => APP_ID 
'redirect_uri' => "http://your.connect.url/some/endpoint" 

Spero che questo aiuta! Quello che dicono i documenti di Facebook, ma non dire bene, è che ottenere un access_token è un processo a due richieste.

2

L'aggiunta del parametro type restituisce auth_token per il livello applicazione, quindi è preferibile OMIT. Ciò che ha funzionato per me, dopo innumerevoli tentativi e combinazioni, utilizza lo stesso parametro redirect_url nella chiamata a /oath/access_token come è stato utilizzato nella chiamata a /oath/authorize.
Quindi la sequenza completa di autorizzare la vostra applicazione per conto di qualcuno è:

1. chiamata o reindirizzare a:

"https://graph.facebook.com/oauth/authorize?client_id=" + my_clientId + "&scope=publish_stream,offline_access,manage_pages" + "&redirect_uri=" + "http://my_redirect_url?blah" 

2. nella pagina che si trova presso il return_url sopra, problema di una richiesta o che cosa mai altro a questo indirizzo:

"https://graph.facebook.com/oauth/access_token?client_id=" + client_id + "&client_secret=" + secret + "&code=" + Request.QueryString["code"] + "&redirect_uri=" + "http://my_redirect_url?blah" 
1

Ho avuto lo stesso problema solo in IE8. La soluzione per me stava inviando access_token nella richiesta API. Qualcosa di simile a questo:

FB.api('/me/friends?access_token=<YOUR TOKEN> 

ho ottenuto il mio gettone tramite PHP in questo modo:

// Create our Application instance. 
$facebook = new Facebook(array(
    'appId' => '<API_ID>', 
    'secret' => '<SECRET>', 
    'cookie' => false, 
)); 

$session = $facebook->getSession(); 
$token = $session['access_token']; 
0

realtà ho notato che se il ritorno URI non hanno una barra sull'estremità avete problemi. Attualmente sto testando il browser e return_uri = https: //mydomain.com non funziona ma return_uri = https: //mydomain.com/ funziona. Se uso il primo ricevo "Errore nella convalida del codice di verifica".

Questo sembra un po 'strano, ma prontamente mi sono perso una parola nelle specifiche/istruzioni in cui. Però ho perso due ore della mia vita.

0

Ho avuto lo stesso problema, ma mi sono liberato di type=client_cred e mi sono assicurato che il parametro redirect_uri fosse lo stesso al momento dell'autorizzazione e access_token call risolto il problema.

12

Quando si utilizza il Facebook Application Token

Se si utilizza l'alias me come nel https://graph.facebook.com/me/ ma il vostro token viene acquisito a Facebook Application, quindi "me" non è più - è l'app o forse niente. Ad ogni modo, non è tua intenzione che l'app interagisca con se stessa.

In questo caso si desidera interagire con il proprio account utente personale da un'app. Quello che devi fare (dopo aver fornito all'app le autorizzazioni richieste dall'interfaccia utente quando viene richiesto) è trovare il tuo ID utente di Facebook e metterlo al posto di "io" per accedere alle tue informazioni personali. per esempio.L'ID utente facebook di Mark Zuckerberg è 4, quindi è https://graph.facebook.com/4/

Lo pseudonimo me funziona solo se sei tu! A volte è difficile ricordare chi è l'utente corrente quando programma Facebook (ad esempio tu, la pagina, l'app, ecc.) Perché siamo abituati a utilizzare l'interfaccia utente di Facebook come noi stessi la maggior parte del tempo. Da un punto di vista della programmazione dipende da ciò che rappresenta il token acquisito.

Un ottimo post sul blog che aiuta sempre a correggermi è Ben Biddington | Facebook Graph API — getting access tokens.

+2

Questa dovrebbe essere la risposta accettata – Bostone

+2

In realtà, non dovrebbe. Ottenere informazioni per id è un metodo pubblico, ed è disponibile anche senza un utente corretto collegato a FB - prova a chiamare questo metodo senza autenticazione - restituirà le informazioni corrette dell'utente. Tramite il passaggio di "me" stai assicurando che Facebook ti ha identificato come utente di FB. – BasTaller