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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:05:53