2010-11-11 17 views
7

Utilizzando il Facebook PHP SDK, sto ottenendo il seguente errore quando si tenta di inviare un aggiornamento di stato:Facebook OAuthException: "utente non ha autorizzato l'applicazione per eseguire questa azione"

Fatal error: Uncaught OAuthException: (#200) The user hasn't authorized the application to perform this action

Questi sono ho preso i passi: codice

  1. Get:

    https://graph.facebook.com/oauth/authorize?client_id=FB_APP_ID&redirect_uri=REDIRECT_URI 
    
  2. Ottenere token di accesso:

    https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&code=CODE&client_secret= FB_SECRET&redirect_uri=REDIRECT_URI 
    
  3. tentare l'aggiornamento di stato:

    require_once(facebook.php); 
    $fb = new Facebook(array(
        'appId' => FB_APP_ID, 
        'secret' => FB_SECRET 
    )); 
    $post = $fb->api('me/feed', 'POST', array(
        'access_token' => ACCESS_TOKEN, 
        'message' => 'hello world!' 
    )); 
    

non vedo alcuna impostazione nella mia richiesta, che autorizzano l'applicazione per fare questo, ma forse mi manca qualcosa. Eventuali suggerimenti?

risposta

12

Assicuratevi di chiedere per esteso publish_stream permesso quando si sta richiedendo il codice (aggiunto come terzo parametro):

https://graph.facebook.com/oauth/authorize?client_id=' . FB_APP_ID . '&redirect_uri=' . REDIRECT_URI . '&scope=publish_stream' 

Spero che questo aiuti.

Cheers!

+0

Questo ha funzionato. Grazie! –

0

Hai seguito gli altri passaggi necessari per connettere l'utente alla tua app e convincerli a autorizzare la tua app a eseguire queste azioni? Devi registrare gli utenti, quindi chiamare showPermissionDialog per consentire loro di accedere e autorizzare la tua app. Questo è ciò che questo errore ti sta dicendo.

+0

Essenzialmente gli unici passaggi che ho preso sono quelli che ho elencato sopra. Sto cercando di seguire i documenti di autenticazione di Facebook (http://developers.facebook.com/docs/authentication/), ma sono neutrali e un po 'vaghi. Hai un esempio di showPermissionDialog in PHP? –

+0

È una funzione javascript utilizzata all'accesso, sebbene possa essere specifica del plug-in di symfony che sto utilizzando. Vedi la risposta di phpfour che potrebbe anche essere di aiuto (più del mio, almeno). –

6

Ho avuto lo stesso problema e questo post mi ha davvero aiutati http://facebook.stackoverflow.com/a/8502709/965536

L'unica differenza con il mio problema era che stavo usando l'SDK PHP, ma essenzialmente funziona lo stesso. Ho usato la chiamata API

$permissions = $facebook->api('/me/permissions'); 

È quindi possibile eseguire i controlli

if(isset($permissions['data'][0]['publish_stream']) && $permissions['data'][0]['publish_stream']) 

Questo funziona per me, ma qualcuno può avere una risposta migliore. Inoltre dovresti avvolgere il tuo stream di pubblicazione in un tentativo di cattura

Spero che questo aiuti.

Grazie

+0

questa è la risposta giusta, perché un utente può modificare le autorizzazioni che un'app ha all'atto della registrazione e in qualsiasi momento successivo. Non è possibile garantire che vengano effettivamente fornite le autorizzazioni richieste. – ftrotter

+0

ha funzionato bene !, questa dovrebbe essere la risposta giusta – Enrique

1

ho messo qui qualche informazione in più:

Marco rispose sopra mi ha portato nella giusta direzione. Ma ci sono volute altre 5 ore per capire la soluzione.

  1. Sto usando omniauth-facebook per ruby ​​su binari.
  2. ho bisogno di impostare la possibilità di omniauth (Si prega di fare riferimento a https://github.com/mkdynamic/omniauth-facebook)
  3. ho pronto anche questo post da "Lu Chen" per impostare la giusta richiesta di portata http://developers.facebook.com/blog/post/2012/04/25/streamlining-publish_stream-and-publish_actions-permissions/

Quindi, ecco il risultato per omniauth.rb:

provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
     :scope => 'email,user_birthday,publish_actions' 
Problemi correlati