Laravel 9 Authentication Breeze Kita akan menggunakan otentikasi laravel 9 menggunakan breeze kalau belum install laravel nya , install dulu pakai perintah composer dibawah ini (skip jika sudah ada) :
composer create-project laravel/laravel laravel
Didalam folder yg telah terinstal laravel kita bisa Install breeze Pakai composer untuk menginstal paket laravel breeze dengan perintah di bawah ini:
composer require laravel/breeze --dev
pasang scafolding nya
php artisan breeze:install
npm install && npm run dev
edit file .env untuk menyesuaikan databasenya contoh saya menjalankannya di windows Webserver (xampp) Apache MySQL
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel9
DB_USERNAME=root
DB_PASSWORD=
Lalu jalankan perintah migrasi database
php artisan migrate
Setelah selesai beberapa file yang baru telah dibuat untuk scaffolding autentikasi. sampai disini kita telah bisa menggunakan login memakai email Jalankan
php artisan serve
Lakukan pendaftaran
Setelah terdaftar misal

Untuk modifkasi supaya bisa login menggunakan username daripada email buat migrasi tambahan
php artisan make:migration add_username_users
lalu buka File /database/migrations/*_add_username_users.php kita akan menambahkan field username setelah field name di dalam tabel Users , edit dengan kode ini:
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('username')->after('name');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('username');
});
}
};
Jalankan perintah
php artisan migrate --path=/database/migrations/*_add_username_users.php
tanda asteriks( * ) biasanya adalah tanggal
Kemudian buka file : /app/Http/Controllers/Auth/RegisteredUserController.php , ganti method store dengan kode ini:
public function store(Request $request)
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'username' => ['required', 'string', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', RulesPassword::defaults()],
]);
$user = User::create([
'name' => $request->name,
'username' => $request->username,
'password' => Hash::make($request->password),
]);
event(new Registered($user));
Auth::login($user);
$user->roles()->attach(AppModelsRole::where('name', 'user')->first());
return redirect(RouteServiceProvider::HOME);
}
Buka file : /resources/views/auth/register.blade.php tambahkan kode dibawah ini:
<!-- UserName -->
<div class="mt-4">
<x-input-label for="username" :value="__('User Name')" />
<x-text-input id="username" class="block mt-1 w-full" type="text" name="username" :value="old('username')" required autofocus /><x-input-error :messages="$errors->get('username')" class="mt-2" />
</div>
Buka file: /app/models/User.php tambahkan fillable username:
protected $fillable = [
'name',
'username',
'email',
'password',
];
Buka file: /app/Http/Requests/Auth/LoginRequest.php pada method function rules
public function rules()
{
return [
'username' => ['required','string','exists:users,username'],
'password' => ['required', 'string'],
];
}
pada method function authenticate ganti dengan kode berikut ini:
public function authenticate()
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only($this->login_by, 'password'), $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([
'login_by' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
public function ensureIsNotRateLimited()
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
return;
}
event(new Lockout($this));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'username' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
public function throttleKey()
{
return Str::transliterate(Str::lower($this->input('username')).'|'.$this->ip());
}
Buka file : /resources/views/auth/login.blade.php tambahkan kode dibawah ini:
<!-- Username -->
<div class="mt-4">
<x-input-label for="username" :value="__('Username ')" />
<x-text-input id="login_by" class="block mt-1 w-full" type="text" name="username" :value="old('username')" required autofocus />
<x-input-error :messages="$errors->get('username')" class="mt-2" />
</div>
Selanjutnya kita bisa login menggunakan username untuk menggantikan email