如你所知, 每次执行对应用程序/ oauth路由的请求(已实现FOSOAuthServerBundle)时, 你都将在数据库中的access_token表中注册一个令牌(或根据auth_code表中请求的grant_type参数) )。
在他们的头脑中, 开发人员不希望数据库中有无用的记录, 因此我们需要从过期的oauth令牌中清除数据库。有两种方法可以从数据库中清除令牌:执行捆绑软件的clean命令或复制相同的逻辑, 然后直接从控制器(或服务)中执行。
FOSOAuthServer捆绑软件已经实现了清洁命令, 可以为你解决问题。只需从命令行执行以下命令:
$ php app/console fos:oauth-server:clean
你将得到类似于以下内容的输出:
你也可以使用与命令相同的方式, 从symfony控制器清除所有过期的令牌。检索服务, 并按以下方式访问deleteExpired函数:
<?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 */
// 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文件)。玩得开心 !
评论前必须登录!
注册