Laravel 9 Authentication Breeze Login with Username

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 enter image description here Setelah terdaftar misal enter image description here

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


Related posts

Published by

kris

kris

Admin dan kontributor utama untuk website ini