Laravel Fortify自定义Vue SPA登录记住我功能不生效如何解决
Laravel Fortify SPA 自定义登录添加「记住我」功能实现步骤
1. 前置检查
- 确认
users表存在remember_token字段,Laravel默认生成的用户迁移已包含该字段,若已删除可重新生成迁移添加:
Schema::table('users', function (Blueprint $table) { $table->rememberToken(); });
- 确认
config/session.php中remember参数配置为你需要的记住时长,单位为分钟,默认值2628000对应5年,可按需调整,比如设置为30天:
'remember' => 43200,
该配置对应记住我长效Cookie的有效期,有效期内关闭浏览器再打开也不会丢失登录状态,符合你的需求
2. 前端Vue适配
在登录表单中添加「记住我」复选框,提交登录请求时将remember字段一并传递,值为布尔类型:
<template> <div> <!-- 其他登录表单字段 --> <div> <input type="checkbox" v-model="loginForm.remember" id="remember"> <label for="remember">记住我</label> </div> <button @click="handleLogin">登录</button> </div> </template> <script> export default { data() { return { loginForm: { email: '', password: '', remember: false } } }, methods: { async handleLogin() { // 必须开启withCredentials,跨域场景下才能正常携带会话和记住我cookie await axios.post('/login', this.loginForm, { withCredentials: true }) // 登录成功后续逻辑 } } } </script>
3. 后端Fortify逻辑适配
Fortify原生已支持记住我功能,你不需要在Fortify::authenticateUsing回调中手动处理记住逻辑,只要请求携带了remember参数且值为真值,Fortify验证通过用户身份后会自动生成remember_web长效Cookie。
你现有自定义验证代码存在语法括号不匹配的问题,修正后参考:
Fortify::authenticateUsing(function (Request $request) { $validator = Validator::make($request->all(), [ 'email' => 'required|email', ]); $validatorname = Validator::make($request->all(), [ 'username' => 'required', ]); $account = $request->email; $user = null; if ($validator->fails()) { if ($validatorname->fails()) { throw ValidationException::withMessages($validator->errors()); } else { $user = User::where('user_name', '=', $account)->first(); } } else { $user = User::where('email', '=', $account)->first(); } if (!$user || !Hash::check($request->password, $user->password)) { throw ValidationException::withMessages([ Fortify::username() => "账号或密码错误", ]); } if ($user->user_status == 1) { throw ValidationException::withMessages([ Fortify::username() => "您的账号尚未完成验证", ]); } if ($user->user_status == 2) { return $user; } return null; });
4. 跨域场景额外配置(SPA必选)
修改config/cors.php配置,确保supports_credentials设为true:
'supports_credentials' => true,
如果使用Sanctum做SPA认证,修改config/sanctum.php的stateful配置,加入你的前端域名,确保会话和记住我Cookie能被正确识别。
内容的提问来源于stack exchange,提问作者SAWA Group
相关产品推荐
相关产品推荐

