Laravel中不使用Eloquent,如何配置database驱动的Auth认证?
Laravel 使用「database」驱动实现认证的方法
一、修改认证配置
打开config/auth.php配置文件,找到providers节点,替换为database驱动的配置,指定要使用的用户表:
'providers' => [ 'users' => [ 'driver' => 'database', 'table' => 'users', // 填写你的用户表名称 ], // 注释掉原有的eloquent驱动配置 // 'users' => [ // 'driver' => 'eloquent', // 'model' => App\Models\Users::class, // ], ],
二、Auth类方法的使用
大部分核心认证方法的用法和eloquent驱动下一致,仅部分细节有区别:
1. 验证用户登录凭据
auth()->attempt()方法用法完全不变,传入包含用户标识(如邮箱、用户名)和密码的数组即可,Laravel会自动查询指定表并验证密码:
if (auth()->attempt(['email' => $request->email, 'password' => $request->password])) { // 认证成功,跳转至目标页面 return redirect()->intended('/dashboard'); } // 认证失败,返回登录页并提示错误 return back()->withErrors(['email' => '邮箱或密码不匹配']);
2. 检查认证状态
auth()->check()和auth()->guest()的用法和之前无差别:
// 判断用户是否已登录 if (auth()->check()) { // 执行已登录用户的逻辑 } // 判断用户是否未登录 if (auth()->guest()) { // 执行访客逻辑,比如跳转登录页 }
3. 获取当前登录用户
使用database驱动时,auth()->user()返回的是标准PHP对象(StdClass),而非Eloquent模型实例,因此无法调用模型方法,但可以直接访问用户字段:
$currentUser = auth()->user(); // 直接访问字段 echo $currentUser->name; echo $currentUser->email;
4. 手动登录用户
- 通过用户ID快速登录:使用
auth()->loginUsingId(),传入用户ID即可:
auth()->loginUsingId(1); // 登录ID为1的用户
- 通过用户对象登录:先通过DB查询获取用户对象,再传入
auth()->login():
$user = DB::table('users')->where('email', 'user@example.com')->first(); auth()->login($user);
5. 退出登录
auth()->logout()用法和之前完全一样:
auth()->logout(); return redirect('/login');
内容的提问来源于stack exchange,提问作者Tin huynh
相关产品推荐
相关产品推荐

