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

Laravel中如何让Auth类使用Admin模型而非User模型执行认证方法

问题原因

你遇到的报错是因为Laravel默认的认证守卫使用的用户提供者关联的是App\Models\User模型,你的User模型仅继承了基础Model类,未继承认证所需的Authenticatable基类,缺少认证相关的核心方法;同时你要用于管理员认证的Admin模型没有被配置为认证提供者的关联模型。

解决方案

1. 修改认证配置

打开项目根目录下config/auth.php文件,按如下规则修改:

新增Admin认证提供者

找到providers配置段,新增Admin对应的认证提供者,原有User相关的配置保留不影响业务使用:

'providers' => [
    // 原有User模型配置保留,用于非认证业务场景
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    // 新增管理员认证提供者
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

配置认证守卫

找到guards配置段,可根据需求二选一配置:

  • 方案A:修改默认web守卫的关联提供者,所有默认Auth调用都走Admin认证
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'admins', // 把原默认值users改为admins
    ],
],
  • 方案B:新增独立的admin守卫,不修改默认配置,避免影响其他业务
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    // 新增管理员专属守卫
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
],

2. 调用认证方法

  • 如果采用方案A修改了默认守卫配置,原有Auth::attempt()、Auth::logout()调用无需修改即可正常使用
  • 如果采用方案B新增了独立守卫,调用认证方法时需要指定守卫:
// 登录验证
Auth::guard('admin')->attempt($credentials);
// 登出
Auth::guard('admin')->logout();

3. 清理配置缓存

修改配置后执行命令清理缓存,确保配置生效:
php artisan config:clear

内容的提问来源于stack exchange,提问作者Osama Amr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:30:03