Laravel 11下使用Jetstream添加登录信息存储Cookie的方法
下面提供两种可靠的实现方式,均基于Jetstream依赖的Fortify认证系统处理:
方法一:监听登录成功事件
利用Laravel内置的登录事件,在用户登录成功后触发Cookie设置:
- 生成事件监听器
运行Artisan命令创建监听器:
php artisan make:listener AddUserCookieOnLogin
- 编写监听器逻辑
打开app/Listeners/AddUserCookieOnLogin.php,修改handle方法:
<?php namespace App\Listeners; use Illuminate\Auth\Events\Login; use Illuminate\Support\Facades\Cookie; class AddUserCookieOnLogin { public function handle(Login $event) { $user = $event->user; // 设置客户端可访问的Cookie,这里以存储用户ID为例 Cookie::queue( 'user_identifier', // Cookie名称 $user->id, // 存储的值 60 * 24 * 7, // 有效期(分钟),这里设为7天 null, // Cookie路径 null, // Cookie域名 false, // 是否仅HTTPS传输 false, // 是否HttpOnly(设为false让客户端JS可访问) false, // SameSite属性,可按需改为'lax'或'strict' ); } }
- 注册监听器
打开app/Providers/EventServiceProvider.php,在$listen数组中关联事件与监听器:
protected $listen = [ // 其他已注册事件... \Illuminate\Auth\Events\Login::class => [ \App\Listeners\AddUserCookieOnLogin::class, ], ];
方法二:自定义Fortify登录响应
直接重写Fortify的登录成功响应,在返回响应时附加Cookie:
打开app/Providers/FortifyServiceProvider.php,在boot方法中添加以下代码:
use Laravel\Fortify\Fortify; public function boot() { // 其他Fortify配置代码... Fortify::loginResponse(function ($request) { $user = auth()->user(); // 跳转到登录后的默认页面,并附加Cookie return redirect()->intended(Fortify::redirects('login')) ->cookie( 'user_identifier', $user->id, 60 * 24 * 7, null, null, false, false, false ); }); }
注意事项
- 若需客户端JavaScript读取Cookie,必须将
HttpOnly设为false,但请勿在Cookie中存储敏感信息(如密码、API密钥),仅存用户ID这类非敏感标识即可。 - 若部署在HTTPS环境下,建议将
Secure属性设为true,确保Cookie仅通过HTTPS传输。 - 之前在JetstreamServiceProvider中添加中间件未生效,大概率是因为中间件在请求进入阶段执行,而Cookie需要在登录成功后的响应阶段设置,上述两种方法更贴合需求。
内容的提问来源于stack exchange,提问作者QNJOONG
相关产品推荐
相关产品推荐

