При попытке аутентификации с несколькими пользователями он продолжает указывать неправильный переданный экземпляр аргумента

#laravel-5.7 #laravel-authentication

#laravel-5.7 #laravel-аутентификация

Вопрос:

Я получаю эту ошибку при попытке входа в систему нескольких пользователей с помощью guards и не могу понять, какой экземпляр ему нужно передать:

 Argument 1 passed to 
IlluminateAuthEloquentUserProvider::validateCredentials() must be an 
instance of IlluminateContractsAuthAuthenticatable, instance of 
AppEmploys given, called in /var/www/html/crmproject/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 379
  

Это мой контроллер аутентификации:

 <?php 
namespace AppHttpControllersAuth;

use AppHttpControllersController;
use IlluminateFoundationAuthAuthenticatesUsers;
use IlluminateHttpRequest;

class EmploysLoginController  extends Controller
{
 use AuthenticatesUsers;

 protected $guard = 'Employs';
/**

 * Where to redirect users after login.

 *

 * @var string

 */

protected $redirectTo = '/Employs';

/**

 * Create a new controller instance.

 *

 * @return void

 */

public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function showLoginForm()
{
    return view('auth.employe-login');
}

public function login(Request $request)
{

    if (auth()->guard('Employs')->attempt(['email' => $request->email, 'password' => $request->password])) {

        dd(auth()->guard('Employs')->user());
    }

    return back()->withErrors(['email' => 'Email or password are wrong.']);
 }
}
  

Это моя модель:

 <?php
namespace App;
use IlluminateDatabaseEloquentModel;
use IlluminateAuthAuthenticatable;
// use IlluminateContractsAuthAuthenticatable as 
AuthenticatableContract;

class Employs extends Model// implements AuthenticatableContract 
{
  protected $primaryKey = 'employ_id';
}
  

я перепробовал много решений, предоставленных онлайн / stackoverflow, но я постоянно получаю эту ошибку, и если вы обнаружите, что этот вопрос имеет двусмысленность, пожалуйста, спросите, прежде чем голосовать против, я пробую это в последний раз здесь.

Комментарии:

1. Почему вы комментируете AuthenticatableContract в модели?

2. потому что это выдает другую ошибку абстрактных классов, которую я не понимаю, почему @PoojaJadav

Ответ №1:

Вы должны создать такую модель:

Модель

     <?php

        namespace App;

        use IlluminateNotificationsNotifiable;
        use IlluminateFoundationAuthUser as Authenticatable;

        class Employs extends Authenticatable
        {
            use Notifiable;

            protected $guard = 'Employs';

            /**
             * The attributes that are mass assignable.
             *
             * @var array
             */
            protected $fillable = [
                'name', 'email', 'password',
            ];

            /**
             * The attributes that should be hidden for arrays.
             *
             * @var array
             */
            protected $hidden = [
                'password', 'remember_token',
            ];
        }
  

Я надеюсь, что это сработает для вас.

Комментарии:

1. вау, на этот раз я не получил никакой ошибки, благодаря этому решена проблема передачи глупого недопустимого аргумента, большое спасибо

2. Мое удовольствие! 🙂

3. итак, SoF обнаружил ваши нарушения при голосовании и забанил ваш аккаунт?

4. Мой аккаунт приостановлен на одну неделю. 🙁

5. ну, они узнают, поступает ли много голосов «за» / «против» через один и тот же идентификатор человека, поэтому дайте большой разрыв между голосами, например, каждый день делайте максимум 2 голоса «за» от идентификатора друга / коллеги: p