Laravel 5.6多认证登录报错:validateCredentials参数类型不匹配
解决Laravel 5.6多认证中
EloquentUserProvider::validateCredentials()类型错误 这个错误的核心原因很明确:你的App\Admin模型没有实现Laravel认证系统要求的Authenticatable契约,导致认证守卫无法正确识别它为合法的用户模型。下面是具体的修复步骤:
步骤1:修改Admin模型
打开app/Admin.php文件,让Admin类继承Laravel提供的Authenticatable基类(这个基类已经帮我们实现了所有必要的认证接口,是最简便的实现方式):
<?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; // 引入认证基类 class Admin extends Authenticatable // 替换原有继承关系 { // 根据你的需求定义可填充字段 protected $fillable = [ 'name', 'email', 'password', ]; // 隐藏敏感字段 protected $hidden = [ 'password', 'remember_token', ]; }
如果你的Admin模型需要继承其他父类,也可以手动实现Illuminate\Contracts\Auth\Authenticatable接口,并实现接口要求的所有方法,但继承Authenticatable是最省心的方案。
步骤2:确认认证配置正确性
打开config/auth.php,确保你已经正确配置了admin专属的认证守卫和用户提供者:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ // 后台专属守卫 'driver' => 'session', 'provider' => 'admins', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ // 指向Admin模型的提供者 'driver' => 'eloquent', 'model' => App\Admin::class, ], ],
步骤3:确保登录控制器使用正确守卫
在你的后台登录控制器(比如AdminLoginController)中,指定使用admin守卫进行认证操作:
<?php namespace App\Http\Controllers\Manage; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; class AdminLoginController extends Controller { public function __construct() { $this->middleware('guest:admin')->except('logout'); } public function showLoginForm() { return view('manage.login'); } public function login(Request $request) { // 验证登录参数 $this->validate($request, [ 'email' => 'required|email', 'password' => 'required|min:6' ]); // 使用admin守卫尝试认证 if (Auth::guard('admin')->attempt( ['email' => $request->email, 'password' => $request->password], $request->remember )) { // 认证成功后跳转到后台首页 return redirect()->intended(route('manage.dashboard')); } // 认证失败返回登录页并保留输入 return redirect()->back()->withInput($request->only('email', 'remember')); } public function logout() { Auth::guard('admin')->logout(); return redirect('/manage/login'); } }
最后,建议清除一下配置缓存,避免旧配置干扰:
php artisan config:clear php artisan cache:clear
现在再访问http://localhost:8000/manage/login尝试登录,这个类型错误应该就会消失了。
内容的提问来源于stack exchange,提问作者user9796679
相关产品推荐
相关产品推荐

