如你所知, 每次执行对应用程序/ oauth路由的请求(已实现FOSOAuthServerBundle)时, 你都将在数据库中的access_token表中注册一个令牌(或根据auth_code表中请求的grant_type参数) )。
在他们的头脑中, 开发人员不希望数据库中有无用的记录, 因此我们需要从过期的oauth令牌中清除数据库。有两种方法可以从数据库中清除令牌:执行捆绑软件的clean命令或复制相同的逻辑, 然后直接从控制器(或服务)中执行。
FOSOAuthServer捆绑软件已经实现了清洁命令, 可以为你解决问题。只需从命令行执行以下命令:
$ php app/console fos:oauth-server:clean
【如何使用FOSOAuthServerBundle从数据库中清除所有过期的令牌】你将得到类似于以下内容的输出:
文章图片
你也可以使用与命令相同的方式, 从symfony控制器清除所有过期的令牌。检索服务, 并按以下方式访问deleteExpired函数:
<
?phpnamespace 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文件)。玩得开心 !
推荐阅读
- 如何解决Windows的git(Powershell和GitHub应用程序)中的”文件名过长”错误
- 如何使用Doctrine和Symfony 3实现全文搜索(MySql)
- 如何在Symfony 2.8中使用FOSUserBundle实现用户系统
- 如何将Chrome Inspect Tools主题更改为Dark
- Java|JavaWeb - 黑马旅游网(1)(项目启动)
- Firebase Android(数据库增长时出现问题)
- iMessage App如何调整图像大小并保持纵横比
- 获取用户在Android中的位置的好方法
- 如何根据Android中当前位置的距离对地理点进行排序