Del spot a la obra
La publicidad tradicional ha funcionado, en gran medida, como una disciplina de impacto: captar…
Buscar
La publicidad tradicional ha funcionado, en gran medida, como una disciplina de impacto: captar…
Hace no tanto, buena parte de la conversación sobre innovación en marketing giraba alrededor de una…
Las contraseñas no fallan porque la gente sea “despistada”. Fallan porque el propio modelo está…
Concluyendo, es muy probable que no tengas ganas de ejecutar la limpieza de tokens expirados manualmente, o tu base de datos pertenece a un entorno mayor y más importante. Entonces, siempre puedes añadir la instrucción…
En una aplicación Symfony con FOSOAuthServerBundle siempre que haces una petición a la ruta /oauth, se registra un token o más tokens en la base de datos, en la tabla access_token.
Lo que pasa es que muchos de estos registros son innecesarios, pues la aplicación ya no los utiliza. Entonces me entran ganas de limpiar los tokens expirados de la base de datos. ¿A ti no?
“El FOSOAuthServerBundle no elimina directamente las entidades AccessToken, por eso puedes acabar con múltiples entradas en tu tabla de la entidad AccessToken.”
He encontrado en la red un artículo de Carlos Delgado en ourcodeworld.com en que nos explican algunas formas de hacerlo.
Existen por lo menos dos formas de limpiar los tokens de la base de datos. Una es ejecutando el Command que viene con el Bundle, otra es copiar la misma lógica y ejecutarla desde un controlador, o desde un servicio.
El bundle FOSOAuthServer tiene implementado un comando que hará todo el trabajo sucio por ti. Solo tienes que ejecutar la siguiente instrucción, según tu versión de Symfony:
$ php app/console fos:oauth-server:clean
o
$ php bin/console fos:oauth-server:clean
Si el resultado es algo parecido a lo siguiente, entonces ha ido todo bien:
$ php bin/console fos:oauth-server:clean
Removed 535 items from Access token storage.
Removed 668 items from Refresh token storage.
Removed 0 items from Auth code storage.
También puedes limpiar todos los tokens expirados desde un Controlador de Symfony o desde un Servicio. Una vez tengas el servicio, puedes acceder al método deleteExpired y limpiarlos. El siguiente código sería un ejemplo de Controller:
<?php
namespace myapp\myBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MiController extends Controller
{
public function limpiartokensAction(){
/*
El control de accesos va aquí.
*/
$services = array(
'fos_oauth_server.access_token_manager' => 'Access token',
'fos_oauth_server.refresh_token_manager' => 'Refresh token',
'fos_oauth_server.auth_code_manager' => 'Auth code',
);
$info = array();
foreach ($services as $service => $name) {
/** @var $instance TokenManagerInterface */
// ¿No estás en el controlador? Necesitas inyectar el contenidor y después usar el método get. Algo como $this->container->get($service);
$instance = $this->get($service);
if ($instance instanceof TokenManagerInterface || $instance instanceof AuthCodeManagerInterface) {
$result = $instance->deleteExpired();
// … haz lo que quieras con $result;
}
}
//...
}
}
Concluyendo, es muy probable que no tengas ganas de ejecutar la limpieza de tokens expirados manualmente, o tu base de datos pertenece a un entorno mayor y más importante. Entonces, siempre puedes añadir la instrucción a tu Crontab y, de esta forma, hacer que el cron lo ejecute cada noche a las 22. Por ejemplo:
$ crontab -e
#Limpiar tokens caducados
00 22 * * * php /camino/hasta/el/symfony/app/console fos:oauth-server:clean > /dev/null
Si todo va bien,¡perfecto! Si no, ¿lo comentamos?
Recibe las últimas novedades directamente en tu correo. Sin spam.
Fuentes:
Comentarios