You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:24:05