Laravel多认证Guard登录报错Admin模型不符合Authenticatable如何解决?
错误原因
你收到的类型错误是因为 App\Models\Admin 模型没有实现 Laravel 认证要求的 Illuminate\Contracts\Auth\Authenticatable 契约,SessionGuard::login() 方法只接受实现了该接口的实例作为参数。
修复步骤
1. 调整Admin模型继承关系
打开 app/Models/Admin.php 文件,让Admin模型继承Laravel提供的认证基类:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Database\Eloquent\Factories\HasFactory; class Admin extends Authenticatable { use HasFactory; // 保留你原有Admin模型的配置,比如可填充字段、隐藏字段等 protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; }
2. 校验auth配置正确性
打开 config/auth.php 确认管理员守卫和用户提供者配置正确:
return [ // ... 其他原有配置 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], // 管理员守卫配置 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // 管理员用户提供者配置 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], ], // ... 其他原有配置 ];
3. 可选:清理控制器冗余代码
你当前控制器中使用了firstOrFail()方法,该方法查询不到匹配数据时会直接抛出404异常,后续的if(!$model)判断完全冗余,可以直接删除,避免无效逻辑。
内容的提问来源于stack exchange,提问作者shrcod
相关产品推荐
相关产品推荐

