Mi sitio utiliza tokens de acceso de por vida (offline_access
). Sin embargo, si el usuario cambia su contraseña, el token de acceso se restablece. ¿Hay algún método para verificar si el token de acceso actual es válido antes de realizar llamadas a Graph API? Gracias por tu tiempo.¿Hay alguna forma de comprobar si el token de acceso de Facebook sigue siendo válido?
Respuesta
Básicamente, FB quiere que lo sondee, o que detecte el caso y redirija al usuario para que se realice una reautorización. Molesto, pero oficial:
(. Viejo, enlace obsoleto Véase más abajo)https://developers.facebook.com/blog/post/500/
Editar: Facebook cambió su estructura de enlace sin redirecciones. No sorprendido.
https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens/
Lo sentimos, es posible que el enlace que siguió esté roto o que la página se haya eliminado. –
Agregó el nuevo enlace. – Otto
+1 para el comentario "No me sorprende". :) "Muévete rápido y rompe cosas" podría ser una filosofía increíble para las empresas de Facebook, pero seguro que nos hace la vida difícil ... – rinogo
Sin conexión, sin enviar nada a Facebook - No lo creo. La forma más sencilla es probablemente para enviar una petición a:
https://graph.facebook.com/me?access_token=...
Facebook también es compatible con las suscripciones de real-time actualizaciones, pero no estoy seguro de cómo aplicarlos a esta situación.
Las actualizaciones en tiempo real le permitirían resolver este problema, pero sería bastante complicado. Básicamente, puede suscribirse a las actualizaciones que le dirán 1) si el usuario eliminó la aplicación o 2) si el usuario eliminó los permisos. Puede usar esto para almacenar los permisos actuales del usuario de faceboook. De esta forma, si el usuario eliminara su aplicación, sabría que el token de acceso ha caducado.
Actualizaciones en tiempo real es en realidad facebooks manera recomendada de manejar permisos. Muchas aplicaciones hacen llamadas de API cada vez que se carga una página para verificar los permisos. Esto tiende a ser lento y poco confiable.
¿Qué pasa cuando el usuario cambia su contraseña? – Ashfame
respuesta de la publicación en Facebook de Otto parece ser la respuesta oficial sobre esta cuestión, sin embargo, utiliza PHP recta en lugar del SDK y también utiliza JS para resolver el problema en lugar de PHP. Si usa PHP para verificar una sesión válida, a menudo necesita un método PHP para garantizar una sesión válida y poder continuar.
El siguiente código comprueba el objeto me con la API de gráfico. Si se lanza una excepción, destruye * la sesión actual de Facebook.
try{
$facebook->api('/me');
}
catch(FacebookApiException $e){
$facebook->destroySession();
}
Esto fuerza las llamadas de gráficos posteriores para crear una nueva sesión de Facebook. Esto al menos le da acceso a los datos públicos para que pueda representar páginas no requieren permisos de usuario FB:
$facebook->api('/userName');
Para reobtain los permisos de acceso de usuario necesitará el usuario para acceder a su aplicación (esto es distinto del que se registren en Facebook mismo). Usted puede hacer esto con JS o con PHP:
$facebook->getLoginUrl();
* Nota del destroySession() llamada no está en una versión etiquetada del SDK PHP todavía. Use la rama principal o remítalo.
Si desea conocer el tiempo de caducidad del token puede pasar una url de gráfico abierto usando appid y token como a continuación, funcionará.
https://graph.facebook.com/oauth/access_token_info?client_id=APPID&access_token=xxxxxxxxx
El parámetro 'client_id' aquí no hace nada. Puedes dejarlo fuera. – Jeroen
Puede comprobar el token utilizar el servicio de depuración modo, echar un vistazo aquí
https://graph.facebook.com/debug_token?input_token=INPUT_TOKEN&access_token=ACCESS_TOKEN
https://developers.facebook.com/docs/howtos/login/debugging-access-tokens/
//When user access token expires user must be logged in and renew the access token him self.it is a Facebook policy
//you can overcome this by sending email to users who have expired access token.
//create a table of successful sending to monitor sending process
//if any failure happened with the user an email is sent to him to ask him to activate there account again.with a link to your subscription page.
//and here is the code should be written on that page.
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_POST_LOGIN_URL";
// known valid access token stored in a database
$access_token = "YOUR_STORED_ACCESS_TOKEN";
$code = $_REQUEST["code"];
// If we get a code, it means that we have re-authed the user
//and can get a valid access_token.
if (isset($code)) {
$token_url="https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code . "&display=popup";
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$access_token = $params['access_token'];
}
// Attempt to query the graph:
$graph_url = "https://graph.facebook.com/me?"
. "access_token=" . $access_token;
$response = curl_get_file_contents($graph_url);
$decoded_response = json_decode($response);
//Check for errors
if ($decoded_response->error) {
// check to see if this is an oAuth error:
if ($decoded_response->error->type== "OAuthException") {
// Retrieving a valid access token.
$dialog_url= "https://www.facebook.com/dialog/oauth?"
. "client_id=" . $app_id
. "&redirect_uri=" . urlencode($my_url);
echo("<script> top.location.href='" . $dialog_url
. "'</script>");
}
else {
echo "other error has happened";
}
}
else {
// success
echo("success" . $decoded_response->name);
echo($access_token);
}
// note this wrapper function exists in order to circumvent PHP's
//strict obeying of HTTP error codes. In this case, Facebook
//returns error code 400 which PHP obeys and wipes out
//the response.
function curl_get_file_contents($URL) {
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
$err = curl_getinfo($c,CURLINFO_HTTP_CODE);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
sin conexión - no es posible
Haz ese usuario ha dado permiso o no:
https://graph.facebook.com/{facebook-id}/permissions?access_token={access-teken}
si token de acceso no es válido entonces se da el error:
{
error: {
message: "The access token could not be decrypted",
type: "OAuthException",
code: 190
}
}
de lo contrario se dará la lista de permisos que el usuario ha dado:
data: [
{
installed: 1,
...... permission list.........
bookmarked: 1
}
],
Actualización de esto como las cosas han cambiado desde OP:
Puede depurar tokens de acceso aquí: https://developers.facebook.com/tools/debug/accesstoken?version=v2.5&q= {access_token}
Fui a través de estos mensajes, la yema me ha parecido muy buenas soluciones como esta:
GET graph.facebook.com/debug_token?
input_token={token-to-inspect}
&access_token={app_id}|{app_secret}
respuesta de esta solicitud le proporciona todo lo que necesita:
- su ID de aplicación - Esto verifica ese token es de su aplicación
- nombre de la aplicación - que también se puede marcar
- expires_at - tiempo de expiración símbolo
- is_valid - booleanas para chequeo
- user_id - que también se puede comparar y comprobar
Ten en cuenta que "|" el signo debe estar allí como una carta
- 1. ¿Cuándo, si alguna vez, el bucle sigue siendo útil?
- 2. ¿Cómo puedo saber si un hWnd determinado sigue siendo válido?
- 3. contraseña cambiada, token de acceso no válido
- 4. ¿Cómo verificar si un descriptor de archivo dado almacenado en una variable sigue siendo válido?
- 5. página de Facebook Token de acceso
- 6. facebook-graph-api Obteniendo "token de acceso OAuth no válido". después de 3 https llama
- 7. ¿Hay un equivalente API del linter/depurador Token de acceso de Facebook?
- 8. ¿Cómo comprobar si un puntero es válido?
- 9. Token de acceso de Facebook con vencimiento más largo
- 10. ¿Cuánto tiempo un marcador TDataset sigue siendo válido?
- 11. ¿Hay alguna forma de comprobar si el texto de un TextView está truncado?
- 12. Extender token de acceso de Facebook después de 60 días
- 13. ¿El enfoque de doble tiempo de ejecución de OpenLaszlo (HTML5 y Flash/SWF) sigue siendo válido?
- 14. PEAR - ¿Sigue siendo relevante?
- 15. Usando Facebook OAuth 2.0 - ¿Cómo obtengo el token de acceso?
- 16. Aplicación de Facebook (NO usuario) vencimiento del token de acceso
- 17. PyWinAuto sigue siendo útil?
- 18. ¿Hay alguna forma de comprobar si el texto Unicode está en un idioma determinado?
- 19. Token de acceso de Facebook - Autenticación del lado del servidor
- 20. ¿Sigue siendo Node.js "sangriento"?
- 21. ¿Sigue siendo viable $ _SERVER ['REQUEST_METHOD']?
- 22. ¿Cómo se renueva un token de acceso de Facebook caducado?
- 23. Token de acceso extendido de Facebook que no funciona correctamente
- 24. HTML vs XHTML ¿sigue siendo importante?
- 25. ¿Hay alguna manera de verificar si el puntero está colgando?
- 26. Facebook Acceso 60 días token y Desaprobados Offline_Access
- 27. Comprobar si existe tabla de acceso
- 28. forma más sencilla de comprobar si hay espacios en ruby
- 29. ¿Hay alguna forma de comprobar si las matrices NumPy comparten los mismos datos?
- 30. Renovar Facebook token de acceso con la koala
Ninguna de las respuestas publicadas aquí funcionó para mí. Sin embargo, esta respuesta fue: https://stackoverflow.com/a/41465468/763010 –