#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
, поэтому, когда я удаляю функцию, она должна автоматически отклонять значения имени пользователя, но это не так… Я в замешательстве, мне не хватает чего-то изменить?