Aprende a limpiar los tokens caducados de tu base de datos generada por el paquete FOSOAuthServer en tu proyecto Symfony.

Como debe saber, cada vez que /oauth se ejecuta una solicitud a la ruta de su aplicación (con FOSOAuthServerBundle implementado), registrará un token en su base de datos en la tabla access_token (o según el grant_typeparámetro de su solicitud en la tabla auth_code).

Un desarrollador en su sano juicio, no querría tener registros inútiles en la base de datos, por lo tanto, necesitamos limpiar la base de datos de los tokens oauth caducados. Hay 2 formas de limpiar los tokens de su base de datos: ejecutando el comando clean del paquete o copiando la misma lógica y ejecutándola directamente desde un controlador (o un servicio). 

Desde un comando

El paquete FOSOAuthServer ya tiene un comando limpio implementado que hará el truco por usted. Simplemente ejecute el siguiente comando desde la línea de comandos:

$ php app/console fos:oauth-server:clean

Obtendrá un resultado similar a:

FOSOauthServerBundle

Desde un controlador

También puedes borrar todos los tokens caducados de un controlador Symfony de la misma forma que lo hace el comando. Recupere un servicio y acceda a la función deleteExpired como esta:

<?php

namespace myapp\myBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class AdminController extends Controller
{
    public function cleartokensAction(){
        $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 */

            // si no eres de un controlador, necesitas inyectar el contenedor y usar la opción get
            $instance = $this->get($service);
            if ($instance instanceof TokenManagerInterface || $instance instanceof AuthCodeManagerInterface) {
                $result = $instance->deleteExpired();
                array_push($info,array(
                  'serviceName' => $name,
                  'numberDeletedTokens' => $result
                ));
            }
        }

        var_dump($info);
        // volcar una matriz con la misma estructura que se muestra en la primera imagen.


        // maneje la respuesta usted mismo, de lo contrario esto arrojará un error.
    }
}

Por supuesto, debes evitar que esta función sea inaccesible para usuarios sin los derechos adecuados (sin administrador).

Si desea automatizar esta tarea, puede crear un crontab en su sistema operativo para ejecutar el comando (o un archivo php con el código proporcionado en el controlador) cuando lo desee. Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores