Laravel登录控制器如何实现用户始终保持登录状态?
解决Laravel登录控制器中始终记住用户的问题
我来帮你搞定这个问题!你遇到的情况很常见,直接设置$remember_me = 1无效,大概率是因为没正确使用Auth::attempt()的第三个参数,或者缺少必要的模型字段。下面是一步步的解决方案:
1. 确保用户模型包含remember_token字段
Laravel的"记住我"功能依赖用户表中的remember_token字段,用来存储登录令牌。如果你的用户表没有这个字段,需要先添加:
- 创建新的迁移文件:
php artisan make:migration add_remember_token_to_users_table --table=users
- 在迁移文件中添加字段定义:
public function up() { Schema::table('users', function (Blueprint $table) { $table->rememberToken(); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropRememberToken(); }); }
- 执行迁移生效:
php artisan migrate
2. 正确调用Auth::attempt()强制记住用户
Auth::attempt()方法的第三个参数是布尔值,专门用来控制是否记住用户。你只需要把这个参数设为true,就能实现始终记住登录用户,不管前端有没有传"记住我"的参数。修改后的控制器代码如下:
public function postSignin(Request $request, AppMailer $mailer) { $this->validate($request, [ 'email' => 'required', 'password' => 'required', ]); $username = $request->get('email'); $password = $request->get('password'); $field = filter_var($username, FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; // 第三个参数传true,强制启用"记住我"功能 if (Auth::attempt([$field => $username, 'password' => $password], true)) { // 登录成功后的跳转或业务逻辑 return redirect()->intended('/dashboard'); } // 登录失败,返回错误提示 return back()->withErrors([ 'credentials' => '用户名/邮箱或密码不正确,请重试' ]); }
3. 检查配置文件(可选)
如果还是存在问题,可以确认config/auth.php中的"记住我"配置是否正常:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ], 'remember' => [ 'driver' => 'cookie', 'expire' => 10080, // 默认7天,可根据需求调整有效期 ],
另外,确保你的用户模型已经使用了Illuminate\Notifications\Notifiable trait(Laravel默认的User模型已经包含这个trait),它会自动处理remember_token的读写逻辑。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

