Laravel Breeze Auth: Login With Email Or Username Example
In this post, I will show you how to login with email or username with laravel breeze authentication.
Sometimes, we may need to let users log in using either their email or username. How can you achieve this if you've implemented the Laravel breeze authentication scaffold?
I'll walk you through a simple solution that allows users to log in with either their email or username.
we simply go to LoginRequest.php request file and overwrite authenticate() method with the following code:
App/Http/Requests/Auth/LoginRequest.php
<?php
namespace App\Http\Requests\Auth;
use Illuminate\Auth\Events\Lockout;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
class LoginRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(): array
{
return [
'login' => ['required', 'string'],
'password' => ['required', 'string'],
];
}
/**
* Attempt to authenticate the request's credentials.
*
* @throws \Illuminate\Validation\ValidationException
*/
public function authenticate(): void
{
$this->ensureIsNotRateLimited();
$login_name = filter_var($this->input("login"), FILTER_VALIDATE_EMAIL) ? "email" : "username";
$this->merge([
$login_name => $this->input("login")
]);
if (! Auth::attempt($this->only($login_name, 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'login' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
/**
* Ensure the login request is not rate limited.
*
* @throws \Illuminate\Validation\ValidationException
*/
public function ensureIsNotRateLimited(): void
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'email' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
/**
* Get the rate limiting throttle key for the request.
*/
public function throttleKey(): string
{
return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip());
}
}
You can also see the following video:
You can see the output:
I hope it can help you...
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- Laravel 11 Image Validation Rules Example
- Laravel 11 Razorpay Payment Gateway Integration Example
- Laravel 11 Dynamic Google Charts Integration Tutorial
- How to Get User Location using IP Address in Laravel 11?
- How to Generate Barcode in Laravel 11?
- Laravel 11 Simple Pagination Example Tutorial
- Laravel 11 Socialite Login with Google Account Example
- How to Generate QR Code in Laravel 11?
- Laravel 11 Resource Route and Controller Example
- How to Get Last Executed Query in Laravel 11?
- Laravel 11 Ajax CRUD Operation Tutorial Example
- Laravel 11 Database Seeder Example Tutorial
- Laravel 11 Create Custom Helper Functions Example