facebook OAuthException: se debe usar un token de acceso activo para consultar información sobre el usuario actual

Posible duplicado de facebook Uncaught OAuthException: se debe utilizar un token de acceso activo para consultar información sobre el usuario actual

Pero no obtuve una solución adecuada.

Estoy usando facebook sdk con codeigniter, funciona correctamente. pero a veces arroja una excepción OAuthException: se debe usar un token de acceso activo para consultar información sobre el usuario actual.

Aquí está el código del archivo del controlador

$config = array(
                    'appId'  => 'XXXXXXX',
                    'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
                    'fileUpload' => true,
              );

$this->load->library('facebook/Facebook', $config);

$fbme = null;

$user = $this->facebook->getUser();

if ($user) {
    try {               
        $fbme = $this->facebook->api('/me');
    } catch (FacebookApiException $e) {
          error_log($e);
          $user = null;
    }
}

//if user is logged in and session is valid.
if ($fbme){
              //do some stuff...
              //redirecting to user home page (my site's)
    }

En el archivo de vista, estoy usando js sdk. El código para ver el archivo es

<div id="fb-root"></div>
    <script type="text/javascript">
        var button2;

        window.fbAsyncInit = function() {
            FB.init({ appId: 'XXXXXXXX',
                status: true,
                cookie: true,
                xfbml: true,
                oauth: true});

           function updateButton(response) {
                button1 = document.getElementById('fb-login'); //login button
                button2 = document.getElementById('fb-logout'); //logout button
                if (response.authResponse) {
                    //user is already logged in and connected
                                button2.onclick = function() {
                                    FB.logout(function(response) {});
                                };
            } else {
                    //user is not connected to your app or logged out
                    button1.onclick = function() {
                        FB.login(function(response) {
                            if (response.authResponse) {
                            } else {
                                //user cancelled login or did not grant authorization
                            }
                        }, {scope:'email,user_birthday,user_about_me,user_likes,user_interests,user_education_history,user_work_history'});
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.login', function(response) {
                window.location.reload();
            });
            FB.Event.subscribe('auth.logout', function(response) {
                window.location.reload();
            });
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());       
    </script>

PROBLEMA:

A veces arroja "OAuthException: se debe usar un token de acceso activo para consultar información sobre el usuario actual". al archivo de registro de errores.

Caso: el usuario está conectado a Facebook y ya ha autenticado mi aplicación Si un usuario inició sesión en Facebook y autenticó mi aplicación e intenta iniciar sesión en mi sitio, en lugar de redirigir al usuario a mi sitio (php sdk no funciona en este caso), está cargando el archivo de vista. En el archivo de vista también estoy comprobando si el usuario ha iniciado sesión en Facebook o no. (a la vista) si el usuario ha iniciado sesión, volverá a cargar la página, se ejecutará el mismo script del controlador y redireccionará al usuario a la página de inicio del usuario (php sdk está funcionando en este caso).

Pero la primera vez no funciona. No se donde estoy cometiendo el error.

Además, ese botón de cierre de sesión (en el archivo de vista) a veces tampoco funciona. Significa que al hacer clic no se cierra la sesión del usuario de Facebook. (Solo está sucediendo en el navegador de uno de mis colegas. Ella está usando Chrome en Windows 7)

preguntado el 28 de septiembre de 12 a las 11:09

1 Respuestas

Estaba teniendo un problema similar al usar PHP-SDK + JS-SDK juntos. Lo resolví temporalmente eliminando FB.init "galleta:verdadero" .

Por alguna razón que no pude encontrar, un inválido solicitud firmada la cookie se comparte entre PHP y JS, luego, el token de acceso válido de la sesión de PHP se anuló con un token de acceso no válido, por lo tanto, se destruyó el token de PHP previamente válido.

La diferencia entre mi problema y el tuyo es que estás iniciando sesión a través de JS e intentando acceder a la misma sesión en PHP (lo estaba haciendo al revés, iniciando sesión en PHP e intentando usar JS-SDK).

Aparentemente, este error está solucionado en esta solicitud de extracción: https://github.com/facebook/facebook-php-sdk/pull/48

Respondido el 10 de diciembre de 12 a las 02:12

FYI: La solicitud_firmada no es "inválida", pero el SDK intenta intercambiar la code valor dentro de él para un token de acceso cada vez que realiza una nueva solicitud, y eso conduce a un error después de los cambios recientes (6 de diciembre de 2012) - CBroe

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.