Ошибка типа Laravel 5.5: аргумент 1, переданный в Illuminate \ Auth \ EloquentUserProvider :: validateCredentials (), должен быть экземпляром

В моем LoginController под Auth я использовал следующие коды:

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.');
}
}
}

А в UserAdmin (модель) в app / 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
    }

}

После отправки данных для входа он показывает мне ошибку:

Type error: Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Model\UserAdmin given, called in /var/www/html/XXXXXX/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 379

Это связано с github.com/Zizaco/entrust/issues/671?

Vishal 22.05.2018 10:44

@Vishal - я сделал то же самое, что и ссылка, которую вы упомянули выше, но ничего не произошло. I dd ('XX'); после Auth :: guard ('admin') -> попытки ($ userdata), но dd не работает.

Niladri Banerjee - Uttarpara 22.05.2018 10:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
10
2
25 009
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Я полагаю, что вам нужно было добавить инструменты \ Illuminate \ Contracts \ Auth \ Authenticatable в определение класса модели UserAdmin.

    class UserAdmin extends Model implements 
    \Illuminate\Contracts\Auth\Authenticatable

Это правильный ответ, который избавит вас от сильной головной боли. Замените extends model на extends Authenticatable, как показано выше.

andromeda 12.02.2019 21:13

В Laravel 8 это больше не работает. Вместо этого используйте class UserAdmin extends \Illuminate\Foundation\Auth\User.

Binar Web 08.10.2020 22:02

Попробуйте запустить 'composer dump-autoload', чтобы проверить "неоднозначное разрешение класса пользователя". Вероятно, у вас есть два класса, определенные как класс пользователя.

Вы должны объявить использование 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;

use Illuminate\Foundation\Auth\AuthenticatesUsers;

Затем в вашем классе модели расширяет AuthenticatesUsers вместо Model.

Вы должны использовать Authenticatable в модели пользователя

Например:

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
  //your code
}

Вы должны расширить класс Authenticatable и реализовать JWTSubject в модели пользователя.

Например :

class User extends Authenticatable implements JWTSubject {

Перейдите в свою модель и вместо расширения модели расширьте User

<?php

namespace App;


class Staff extends \Illuminate\Foundation\Auth\User
{
}

Другие вопросы по теме