如何使用Laravel Event Listener实现登录、登出后自动清除缓存?
Laravel 基于 Event Listener 实现登录登出后自动清除缓存的操作教程
实现思路
Laravel 本身已经内置了用户登录、登出对应的系统事件,不需要自定义事件,仅需创建对应的缓存清理监听器,将监听器绑定到内置的登录/登出事件上,即可在对应操作触发时自动执行缓存清理逻辑。
具体操作步骤
1. 生成缓存清理监听器
执行 Artisan 命令生成监听器文件:
php artisan make:listener ClearUserCache
生成的监听器文件默认路径为 app/Listeners/ClearUserCache.php。
2. 编写监听器缓存清理逻辑
打开生成的监听器文件,修改 handle 方法,写入你需要的缓存清理规则:
<?php namespace App\Listeners; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\Cache; class ClearUserCache { public function handle($event) { // 示例:仅清理当前操作用户的专属缓存 Cache::forget('user_profile_' . $event->user->id); Cache::forget('user_permissions_' . $event->user->id); // 若需要清空全站缓存可使用下方方法 // Cache::flush(); } }
3. 绑定监听器到登录/登出事件
打开 app/Providers/EventServiceProvider.php,在 $listen 属性中添加事件和监听器的绑定关系:
protected $listen = [ // 其他已存在的事件绑定保留即可 \Illuminate\Auth\Events\Login::class => [ \App\Listeners\ClearUserCache::class, ], \Illuminate\Auth\Events\Logout::class => [ \App\Listeners\ClearUserCache::class, ], ];
4. 功能验证
可以先在监听器的 handle 方法中添加日志输出,测试事件触发是否正常:
\Log::info('用户缓存已清理,操作用户ID:' . $event->user->id);
执行登录、登出操作后,查看 storage/logs 目录下的日志文件,确认日志正常输出、对应缓存已被删除即可。
注意事项
如果你没有使用 Laravel 自带的 Auth 门面的
login()、logout()方法,而是自定义了登录登出逻辑,需要在你自己的逻辑中手动触发对应事件,监听器才会生效,触发代码如下:// 登录后触发 event(new \Illuminate\Auth\Events\Login($user)); // 登出后触发 event(new \Illuminate\Auth\Events\Logout($user));
内容的提问来源于stack exchange,提问作者Unwellee
相关产品推荐
相关产品推荐

