Паспорт Laravel, по-видимому, не вызывает функцию findForPassport

#php #laravel #laravel-passport

Вопрос:

Привет, у меня есть паспорт, настроенный в laravel, и до сих пор я аутентифицировался с помощью комбинации имени пользователя и пароля. Однако теперь я попытался изменить findForPassport метод в аутентифицируемом классе , чтобы он также принимал email или username , и похоже, что эта функция вообще не вызывается. Поэтому я изо всех сил пытаюсь понять, где нужно что-то изменить, чтобы иметь возможность это сделать… Прошло некоторое время с тех пор, как я это установил, но я почти уверен, что больше нигде этого не менял. Я искал ответ высоко и далеко, но я не могу понять, что не так.

Модель пользователя

 namespace AppModels;  use IlluminateContractsAuthMustVerifyEmail; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateFoundationAuthUser as Authenticatable; use IlluminateNotificationsNotifiable; use LaravelPassportHasApiTokens; use AppTraitsUuid;  class User extends Authenticatable {  use HasApiTokens, HasFactory, Notifiable, Uuid;   //...   /**  * The attributes that are mass assignable.  *  * @var array  */  protected $fillable = [  'first_name',  'last_name',  'sub_group',  'email',  'password',  'role',  'username',  'last_login',  'company_id'  ];   /**  * The attributes that should be hidden for arrays.  *  * @var array  */  protected $hidden = [  'password',  'remember_token',  'created_at',  'updated_at',  'last_login',  'password_reset_token',  'company_id'  ];   public function findForPassport($username) {  return $this-gt;orWhere('username', $username)-gt;orWhere('email', $username)-gt;first();  }  }  

Моя конечная точка входа в систему:

 public function login(Request $request) {   $loginData = $request-gt;validate([  'username' =gt; 'required',  'password' =gt; 'required'  ]);   if(!auth()-gt;attempt($loginData)) {  return response()-gt;json(['message' =gt; 'Invalid Credentials', 'success'=gt;false], 400);  }   //Update login timestamp  auth()-gt;user()-gt;visited();   $accessToken = auth()-gt;user()-gt;createToken('authToken')-gt;accessToken;  return response()-gt;json(['user' =gt; auth()-gt;user(), 'access_token' =gt; $accessToken, 'success'=gt;true]);  }  

Как вы можете видеть из исходного кода, он должен принимать либо адрес электронной почты, либо имя пользователя, но только когда я ввожу правильное имя пользователя, он регистрирует меня. Даже если я полностью удалю объявление функции findforpassport или поставлю a die() в качестве первой строки в этой функции, вход в систему все равно будет работать одинаково… Это говорит мне о том, что эта функция не вызывается, потому что passport по умолчанию принимает email , поэтому, когда я удаляю функцию, она должна автоматически отклонять значения имени пользователя, но это не так… Я в замешательстве, мне не хватает чего-то изменить?