Реализация аутентификации по имени пользователя в Laravel 6: подробное руководство

В 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 по умолчанию или создать собственного поставщика пользователей, эти подходы обеспечивают гибкость и контроль над процессом аутентификации вашего приложения..

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