В Laravel 6 система аутентификации по умолчанию использует уникальный идентификатор пользователя, обычно идентификатор пользователя. Однако существуют сценарии, в которых для аутентификации пользователя может потребоваться использовать имя пользователя вместо идентификатора. В этой статье мы рассмотрим несколько методов реализации аутентификации на основе имени пользователя в Laravel 6, попутно предоставляя примеры кода.
Метод 1: настройка аутентификации по умолчанию в Laravel
Самый простой способ использовать имя пользователя для аутентификации — настроить логику аутентификации по умолчанию в Laravel. Для этого выполните следующие действия:
Шаг 1. Настройте модель пользователя
В модели пользователя добавьте новый метод с именем findForPassport:
public function findForPassport($username) {
return $this->where('username', $username)->first();
}
Шаг 2. Измените контроллер входа
В LoginController переопределите метод username, чтобы он возвращал 'username'вместо 'email':
public function username() {
return 'username';
}
Метод 2: реализация пользовательского поставщика пользователей
Если вы предпочитаете более модульный подход, вы можете создать собственный поставщик пользователей. Этот метод обеспечивает большую гибкость и может быть полезен, если вы хотите повторно использовать код в нескольких проектах. Вот как это можно реализовать:
Шаг 1. Создайте собственный поставщик пользователей
Создайте собственный поставщик пользователей с помощью следующей команды:
php artisan make:provider CustomUserProvider
Шаг 2. Измените CustomUserProvider
В методе retrieveByCredentialsкласса CustomUserProviderизмените логику поиска пользователя по имени пользователя:
public function retrieveByCredentials(array $credentials) {
if (empty($credentials) ||
(count($credentials) === 1 &&
array_key_exists('password', $credentials))) {
return;
}
// Find the user by username
return $this->createModel()->where('username', $credentials['username'])->first();
}
Шаг 3. Настройте собственный поставщик пользователей
В файле config/auth.phpобновите массив providers, чтобы использовать свой собственный поставщик пользователей:
'providers' => [
'users' => [
'driver' => 'custom',
'model' => App\Models\User::class,
'provider' => App\Providers\CustomUserProvider::class,
],
],
Следуя методам, описанным в этой статье, вы можете успешно реализовать аутентификацию на основе имени пользователя в Laravel 6. Независимо от того, решите ли вы настроить аутентификацию Laravel по умолчанию или создать собственного поставщика пользователей, эти подходы обеспечивают гибкость и контроль над процессом аутентификации вашего приложения..
Не забудьте выбрать метод, который лучше всего соответствует требованиям вашего проекта, и соблюдайте правила безопасности при обработке учетных данных пользователей.