[Php] Cómo extender la validez del token de acceso desde la desactivación del acceso sin conexión


Answers

En realidad, lo que se dijo:

Si access_token se genera desde una llamada OAuth del lado del servidor, el access_token resultante tendrá el tiempo de expiración más largo . Si la llamada se realiza mientras todavía hay un access_token válido para ese usuario, el access_token devuelto de esta segunda llamada se mantendrá igual y solo se extenderá el tiempo de caducidad. Nuevamente, llamar esto varias veces durante el mismo día resultará solo en la primera llamada extendiendo el tiempo de vencimiento.

Lo que significa que será más largo que el token generado por el lado del cliente, y para recibir el token extendido (60 días) debe hacerlo manualmente mediante la emisión de una solicitud a:

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN

Este token aún puede volverse inválido por varias razones, y cómo manejar esto descrito en Cómo: Manejar el acceso vencido tokens publicación de blog.

Actualizar:
A partir del 07 de agosto de 2012 , puede usar el método setExtendedAccessToken para extender access_token lugar de construir manualmente URL y recuperar detalles.

Question

Como el Permission offline_access está en desuso en el flujo de Authentication de Facebook, tenemos problemas para generar los tokens de acceso de larga duración sin ese permiso.

En el documento de Facebook sobre la desaprobación , dice, los tokens de acceso generados por OAuth del lado del servidor serán de larga duración, pero no lo son.

¿Me estoy perdiendo de algo? Algunos ajustes en la configuración de la aplicación? ¿Algún código especial que necesito usar para extender el tiempo de expiración de los tokens de acceso? Según entiendo la documentación, para la autenticación del lado del servidor, el token de acceso al que se puede acceder mediante el método getAccessToken() de PHP SDK cuando el usuario está conectado es de larga duración.




Un token de acceso generado a través de una llamada OAuth del lado del servidor será del tipo extendido (más largo) y no es necesario que lo cambie. Ya es un token extendido. Lo único que debes hacer es habilitar "Depreciar el acceso sin conexión" en la configuración de tu aplicación. Por supuesto, esto solo es necesario si "Deprecate el acceso fuera de línea" se deshabilitó anteriormente.

Luego, cuando autentifique usuarios a través de Facebook, recibirá un token de acceso que durará 60 días. Autenticar varias veces durante el mismo día dará como resultado solo la primera autenticación que extiende el tiempo de caducidad.




esto es para extender el token de acceso a las páginas para que nunca caduque, y extender la vida útil de los tokens de acceso de usuario que caducan después de 2 meses (el 'nuevo token de acceso').

Ok, tomó aproximadamente una semana de investigación, pero esta es mi solución. en https://developers.facebook.com/tools/explorer/ asegúrate de tener manage_page como parte de tu access_token. después de eso, usa este código con tu id de aplicación, secreto y redirección:

<?php
   app_id = "APP_ID";
   $app_secret = "APP_SECERET";
   $post_login_url = "REDIRECT_URL";


   $code = $_REQUEST['code'];

   //Obtain the access_token with publish_stream permission 
   if(empty($code)){ 
      $dialog_url= "http://www.facebook.com/dialog/oauth?"
       . "client_id=" .  $app_id 
       . "&redirect_uri=" . urlencode( $post_login_url)
       .  "&COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES";
      echo("<script>top.location.href='" . $dialog_url 
      . "'</script>");
     }
    else {


      $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       . "&code=" . $code;
      $response = file_get_contents($token_url);
      $params = null;
      parse_str($response, $params);
      $access_token = $params['access_token'];
      echo 'access token: ' . $access_token.'<br>';

        if($access_token){


          $token_url="https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id 
       . "&redirect_uri=". urlencode($post_login_url)
       . "&client_secret=" . $app_secret
       .'&grant_type=fb_exchange_token'
       . "&fb_exchange_token=" . $access_token;
       $response = file_get_contents($token_url);
       $access_token = $params['access_token'];
       echo 'new access token: '.$access_token;

        }
    }*/

?>

Después de eso, copie el 'nuevo token de acceso' y regrese a https://developers.facebook.com/tools/explorer/ Cuando llegue allí en su nuevo token de acceso al campo del token de acceso. Luego haz clic en enviar. Después de eso en el nodo, verá un + _ ___ clic en esto y desplácese hacia abajo a las cuentas y haga clic en eso. busque la página para la que necesita el token de acceso y cópiela y péguelo en el campo clave de acceso. haga clic en depuración y verá que nunca caducará. guarda ese token, seguirá siendo válido siempre y cuando no restablezcas el secreto de tus aplicaciones.




Links