facebook OAuthException: se debe usar un token de acceso activo para consultar información sobre el usuario actual
Frecuentes
Visto 9,557 equipos
2
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)
1 Respuestas
5
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php codeigniter facebook-php-sdk or haz tu propia pregunta.
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