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

Laravel Fortify 如何记录登录、密码验证失败及登出认证事件?

Laravel Fortify 记录认证事件实现方案

Fortify本身内置了认证相关的事件,不需要修改配置文件,通过事件监听就能实现日志记录,具体步骤如下:

1. 确认Fortify的内置事件

Fortify已经定义了你需要的三个核心事件:

  • 登录成功:Laravel\Fortify\Events\Login
  • 密码验证失败:Laravel\Fortify\Events\FailedPasswordValidation
  • 登出成功:Laravel\Fortify\Events\Logout

2. 生成事件监听器

通过Artisan命令快速生成对应事件的监听器:

# 登录事件监听器
php artisan make:listener LogLoginEvent --event=Laravel\\Fortify\\Events\\Login

# 密码验证失败事件监听器
php artisan make:listener LogFailedPasswordEvent --event=Laravel\\Fortify\\Events\\FailedPasswordValidation

# 登出事件监听器
php artisan make:listener LogLogoutEvent --event=Laravel\\Fortify\\Events\\Logout

3. 编写日志逻辑

打开生成的监听器文件(位于app/Listeners/目录下),在handle方法中添加日志记录代码:

登录成功日志(LogLoginEvent.php)

public function handle(Login $event)
{
    \Illuminate\Support\Facades\Log::info(
        "用户登录成功",
        [
            'user_id' => $event->user->id,
            'email' => $event->user->email,
            'ip' => request()->ip(),
            'timestamp' => now()->toDateTimeString()
        ]
    );
}

密码验证失败日志(LogFailedPasswordEvent.php)

public function handle(FailedPasswordValidation $event)
{
    \Illuminate\Support\Facades\Log::warning(
        "密码验证失败",
        [
            'email' => $event->credentials['email'],
            'ip' => request()->ip(),
            'timestamp' => now()->toDateTimeString()
        ]
    );
}

登出成功日志(LogLogoutEvent.php)

public function handle(Logout $event)
{
    \Illuminate\Support\Facades\Log::info(
        "用户登出成功",
        [
            'user_id' => $event->user->id,
            'email' => $event->user->email,
            'ip' => request()->ip(),
            'timestamp' => now()->toDateTimeString()
        ]
    );
}

4. 注册监听器

打开app/Providers/EventServiceProvider.php,在$listen数组中添加事件与监听器的映射:

protected $listen = [
    // 保留原有事件配置...
    \Laravel\Fortify\Events\Login::class => [
        \App\Listeners\LogLoginEvent::class,
    ],
    \Laravel\Fortify\Events\FailedPasswordValidation::class => [
        \App\Listeners\LogFailedPasswordEvent::class,
    ],
    \Laravel\Fortify\Events\Logout::class => [
        \App\Listeners\LogLogoutEvent::class,
    ],
];

可选:自定义日志渠道

如果想把认证日志单独存储到指定文件,可以在config/logging.php中配置自定义渠道,比如:

'channels' => [
    // 其他渠道...
    'auth' => [
        'driver' => 'single',
        'path' => storage_path('logs/auth.log'),
        'level' => 'info',
    ],
],

然后在监听器中指定渠道:

\Illuminate\Support\Facades\Log::channel('auth')->info(...);

内容的提问来源于stack exchange,提问作者Andreas Christodoulou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:57:58