Как очистить все просроченные токены из базы данных с FOSOAuthServerBundle

Как вы должны знать, каждый раз просьба к /oauth маршрут вашего приложения выполняется (с внедрением FOSOAuthServerBundle), вы зарегистрируете токен в своей базе данных в таблице access_token (или в соответствии с grant_type параметр вашего запроса в таблице auth_code).

Разработчик в здравом уме не хотел бы иметь бесполезные записи в базе данных, поэтому нам нужно очистить базу данных от устаревших маркеров oauth. Есть два способа очистить токены из вашей базы данных: выполнить команду очистки пакета или скопировать ту же логику и выполнить ее непосредственно из контроллера (или службы).

команда

В пакете FOSOAuthServer уже реализована чистая команда, которая поможет вам. Просто выполните следующую команду из командной строки:

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

Вы получите вывод, похожий на:

FOSOauthServerBundle

контроллер

Вы также можете очистить все просроченные токены с контроллера Symfony так же, как это делает команда. Получите сервис и получите доступ к функции deleteExpired, например:

 '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 */
// if you're not from a controller, you need to inject the container and the use the get option
$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);
// dump an array with the same structure as the shown in the first image.
// handle the response by yourself, otherwise this will throw error.
}
}

Конечно, вам нужно защитить эту функцию от недоступности для пользователей без соответствующих прав (без прав администратора).

Если вы хотите автоматизировать эту задачу, вы можете создать crontab в вашей ОС для выполнения команды (или php-файл с кодом, предоставленным в контроллере), когда вы захотите. Повеселись !

Ссылка на основную публикацию
Adblock
detector