2010-11-11 11 views
7

Utilizando el SDK de Facebook PHP, estoy recibiendo el siguiente error al intentar publicar una actualización de estado:Facebook OAuthException: "usuario no ha autorizado la aplicación para realizar esta acción"

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

Son los pasos que han tomado:

  1. obtener el código:

    https://graph.facebook.com/oauth/authorize?client_id=FB_APP_ID&redirect_uri=REDIRECT_URI 
    
  2. Obtener token de acceso:

    https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&code=CODE&client_secret= FB_SECRET&redirect_uri=REDIRECT_URI 
    
  3. Intento de la actualización de estado:

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

no veo ninguna configuración en mi solicitud de que se autorice la aplicación para hacer esto, pero tal vez me falta algo. ¿Alguna sugerencia?

Respuesta

12

Asegúrese de pedir permiso extendido publish_stream cuando se está solicitando código (añadido como tercer parámetro):

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

Espero que esto ayude.

¡Salud!

+0

Esto funcionó. ¡Gracias! –

0

¿Ha tomado los demás pasos necesarios para conectar al usuario con su aplicación y lograr que autorice a su aplicación a realizar estas acciones? Debe registrar a los usuarios y luego llamar a showPermissionDialog para que puedan iniciar sesión y autorizar su aplicación. Eso es lo que te está diciendo este error.

+0

Esencialmente, los únicos pasos que he dado son los que he enumerado anteriormente. Intento seguir los documentos de Autenticación de Facebook (http://developers.facebook.com/docs/authentication/), pero son neutrales en cuanto al idioma y un poco vagos. ¿Tienes un ejemplo de showPermissionDialog en PHP? –

+0

Es una función de JavaScript utilizada al iniciar sesión, aunque podría ser específica del complemento de Symfony que estoy usando. Ver la respuesta de phpfour que también podría ser de ayuda (más que la mía, al menos). –

6

que tenían el mismo problema y este post realmente me ayudó http://facebook.stackoverflow.com/a/8502709/965536

La única diferencia con mi problema era que yo estaba usando el SDK de PHP, pero básicamente funciona de la misma. He utilizado la llamada a la API

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

A continuación, puede ejecutar sus cheques

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

Esto funciona para mí, pero alguien puede tener una mejor respuesta. También debe envolver su secuencia de publicar publicación en un try catch

Espero que esto ayude.

Gracias

+0

esta es la respuesta correcta, porque un usuario puede cambiar los permisos que tiene una aplicación al registrarse y en cualquier momento posterior. No hay forma de garantizar que se otorguen los permisos que se solicitan. – ftrotter

+0

funcionó bien !, esta debería ser la respuesta correcta – Enrique

1

me pusieron aquí algo más de información:

Marcos respondió anterior me ha llevado a la dirección correcta. Pero me llevó otras 5 horas descubrir la solución.

  1. Estoy usando omniauth-facebook para ruby ​​on rails.
  2. necesito fijar el alcance de OmniAuth (Por favor refiérase a https://github.com/mkdynamic/omniauth-facebook)
  3. también listo este post de "Lu Chen" para establecer la solicitud alcance adecuado http://developers.facebook.com/blog/post/2012/04/25/streamlining-publish_stream-and-publish_actions-permissions/

Por lo tanto, aquí está el resultado para omniauth.rb:

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