Раскрываем возможности Laravel: войдите в систему с помощью телефона или электронной почты

В современный век цифровых технологий аутентификация пользователей является важнейшим аспектом разработки веб-приложений. Laravel, популярный PHP-фреймворк, предоставляет надежную систему аутентификации «из коробки». Одним из распространенных требований является разрешение пользователям входить в систему, используя номер телефона или адрес электронной почты. В этой статье блога мы рассмотрим различные методы реализации этой функциональности в Laravel, а также приведем примеры кода и практические советы.

Метод 1: собственный контроллер входа
Один из способов входа в систему с помощью телефона или электронной почты — создание собственного контроллера входа. Начните с создания нового контроллера с помощью команды artisan:

php artisan make:controller Auth\LoginController

В сгенерированном контроллере переопределите метод username, чтобы динамически определять поле входа на основе ввода пользователя:

public function username()
{
    $loginType = request()->input('login_type');
    $field = filter_var($loginType, FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
    request()->merge([$field => $loginType]);
    return $field;
}

Затем обновите метод attemptLogin, включив в него поля телефона и электронной почты:

protected function attemptLogin(Request $request)
{
    $credentials = $request->only($this->username(), 'password');
    return Auth::attempt($credentials, $request->filled('remember'));
}

И наконец, обновите форму входа, включив в нее раскрывающийся список или переключатели, позволяющие пользователю выбирать тип входа.

Метод 2: пользовательский поставщик пользователей
Другой подход заключается в создании пользовательского поставщика пользователей для обработки логики аутентификации. Сначала создайте нового провайдера с помощью команды artisan:

php artisan make:provider CustomUserProvider

В созданном поставщике реализуйте метод retrieveByCredentialsдля получения пользователя по телефону или электронной почте:

public function retrieveByCredentials(array $credentials)
{
    $field = filter_var($credentials['login_type'], FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
    return User::where($field, $credentials['login_type'])->first();
}

Затем обновите метод validateCredentials, чтобы проверить учетные данные для входа:

public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['password'];
    return app('hash')->check($plain, $user->getAuthPassword());
}

И наконец, обновите файл config/auth.php, чтобы использовать пользовательский поставщик пользователей.

Метод 3: сторонние пакеты
Экосистема Laravel предлагает несколько сторонних пакетов, которые упрощают процесс реализации входа в систему с помощью телефона или электронной почты. Некоторые популярные варианты включают «Laravel Authy» и «Laravel Fortify». Эти пакеты предоставляют готовые функциональные возможности и легко настраиваются в соответствии с вашими конкретными требованиями.

Реализация входа в систему с помощью телефона или электронной почты в Laravel открывает новые возможности для аутентификации пользователей. Следуя методам, изложенным в этой статье, вы можете улучшить взаимодействие с пользователем и повысить безопасность своих веб-приложений. Независимо от того, решите ли вы создать собственный контроллер входа в систему, собственный поставщик пользователей или использовать сторонние пакеты, Laravel предоставляет гибкость и инструменты, необходимые для эффективного достижения этой функциональности.