Laravel 5.5类型错误:传递给Illuminate\Auth\EloquentUserProvider :: validateCredentials()的参数1必须是一个实例

Nil*_*ara 5 laravel laravel-5

在Auth下的LoginController中,我使用了以下代码:

namespace App\Http\Controllers\Auth;

use App\Model\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Redirect;
use Hash;
use Auth;
use DB;
use App\Model\UserAdmin;

class LoginController extends Controller {
use AuthenticatesUsers;
public function __construct() {
        $this->middleware('guest')->except('logout');
    }

public function doLogin(Request $request) {
$userdata = array(
            'email' => Input::get('email'),
            'password' => Input::get('password'),
            'status' => '1',
        );
if (Auth::guard('admin')->attempt($userdata)) {
  return Redirect::intended('/administrator/dashboard')->with('successMessage', 'You have successfully logged in.');
}
}
}
Run Code Online (Sandbox Code Playgroud)

在app/Model下的UserAdmin(model)中如下:

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Config;
class UserAdmin extends Authenticatable {
protected $table = 'adminusers';
    public $timestamps = false;
    protected $fillable = ['firstName', 'lastName', 'email', 'company', 'website'];

    public function __construct() {
        parent::__construct(); // Don't forget this, you'll never know what's being done in the constructor of the parent class you extended
    }

}
Run Code Online (Sandbox Code Playgroud)

提交登录详细信息后,它会显示错误:

类型错误:传递给Illuminate\Auth\EloquentUserProvider :: validateCredentials()的参数1必须是Illuminate\Contracts\Auth\Authenticatable的实例,App/Model\UserAdmin的实例,在/ var/www/html/XXXXXX /中调用第379行的vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php

小智 18

我想您需要将implements\Illuminate\Contracts\Auth\Authenticatable添加到UserAdmin模型类定义中.

    class UserAdmin extends Model implements 
    \Illuminate\Contracts\Auth\Authenticatable
Run Code Online (Sandbox Code Playgroud)

  • 在 Laravel 8 下这不再起作用。请改用“class UserAdmin extends \Illuminate\Foundation\Auth\User”。 (3认同)
  • 这是正确的答案,将为您节省大量的头痛。将 `extends model` 替换为 `extends Authenticatable`,如上所示。 (2认同)

小智 7

您必须在 User 模型中使用 Authenticatable

例如:

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
  //your code
}
Run Code Online (Sandbox Code Playgroud)


mel*_*hin 6

您必须声明使用 AuthenticableTrait 作为 Authenticatable 接口。

例如 :

use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Auth\Authenticatable as AuthenticableTrait;
use Illuminate\Database\Eloquent\Model;

class Company extends Model implements Authenticatable
{
use AuthenticableTrait;
Run Code Online (Sandbox Code Playgroud)