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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:40:31