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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:36:01