Starter kit

Apa yang dihasilkan Breeze dan paket scaffolding autentikasi lain.

Daftar isi

Starter kit adalah paket resmi Laravel yang menghasilkan rangkaian autentikasi siap pakai, mulai dari controller, rute, tampilan, hingga pengujian. Topik ini membahas isi paket Breeze beserta proses instalasinya, lalu membandingkannya dengan Jetstream dan Fortify sebagai pilihan scaffolding autentikasi lain. Pemahaman ini berguna ketika sebuah proyek perlu menimbang antara menggunakan kode bawaan paket dan menulis autentikasi sendiri dari nol.

Menginstal Breeze#

Breeze adalah starter kit yang menghasilkan autentikasi lengkap dengan kode yang sengaja dibuat sederhana agar mudah dibaca. Instalasinya terdiri atas dua langkah, yaitu menambahkan paket melalui Composer, kemudian menjalankan perintah breeze:install untuk menerbitkan berkas-berkasnya ke dalam proyek.

bash
# tidak-dijalankan
# menambahkan paket Breeze sebagai dependensi pengembangan
composer require laravel/breeze --dev

Perintah tersebut dijalankan pada salinan proyek baru yang dibuat khusus untuk pengujian, karena starter kit mengubah banyak berkas sekaligus. Composer mengonfirmasi paket yang terpasang beserta versinya.

text Hasil perintah composer require
81 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force

  INFO  No publishable resources for tag [laravel-assets].  

No security vulnerability advisories found.
Using version ^2.4 for laravel/breeze

Setelah paketnya terpasang, perintah breeze:install menerima argumen tumpukan antarmuka, misalnya blade, livewire, react, atau vue. Pada percobaan ini, tumpukan Blade yang dipilih.

bash
# tidak-dijalankan
# menerbitkan berkas autentikasi dengan tumpukan Blade
php artisan breeze:install blade

Perintah tersebut juga memasang dependensi npm dan menjalankan build aset melalui Vite, sehingga dibutuhkan Node.js di lingkungan pengembangan. Baris terakhir keluaran tersebut menandai keberhasilan instalasi.

text Hasil perintah breeze:install
> build
> vite build

    vite v8.3.5 building client environment for production...
    transforming...
    ✓ 4 modules transformed.
    rendering chunks...
    computing gzip size...
    public/build/manifest.json             0.33 kB │ gzip:  0.16 kB
    public/build/assets/app-DciKFhTV.css  35.47 kB │ gzip:  6.97 kB
    public/build/assets/app-Dr67-uCa.js   54.32 kB │ gzip: 19.13 kB

    ✓ built in 621ms


   INFO  Breeze scaffolding installed successfully.  

Nama berkas aset pada keluaran tersebut memuat hash build sehingga nilainya berbeda di setiap lingkungan, sedangkan baris INFO di bagian akhirnya selalu sama.

Berkas yang dihasilkan Breeze#

Instalasi di atas menambahkan sembilan controller autentikasi, satu berkas rute khusus, enam tampilan halaman, satu Form Request untuk login, dan enam kelas pengujian. Daftar berikut memperlihatkan berkas-berkas utamanya.

text Berkas utama yang dihasilkan Breeze
app/Http/Controllers/Auth/
├── AuthenticatedSessionController.php
├── ConfirmablePasswordController.php
├── EmailVerificationNotificationController.php
├── EmailVerificationPromptController.php
├── NewPasswordController.php
├── PasswordController.php
├── PasswordResetLinkController.php
├── RegisteredUserController.php
└── VerifyEmailController.php
app/Http/Requests/Auth/LoginRequest.php
routes/auth.php
resources/views/auth/
├── confirm-password.blade.php
├── forgot-password.blade.php
├── login.blade.php
├── register.blade.php
├── reset-password.blade.php
└── verify-email.blade.php
tests/Feature/Auth/
├── AuthenticationTest.php
├── EmailVerificationTest.php
├── PasswordConfirmationTest.php
├── PasswordResetTest.php
├── PasswordUpdateTest.php
└── RegistrationTest.php

Berkas routes/auth.php dipanggil dari routes/web.php dan mengelompokkan rute berdasarkan middleware. Rute untuk halaman login dan register dibungkus middleware guest agar tidak diakses oleh pengguna yang sudah login, sedangkan halaman dashboard dibungkus middleware auth agar tidak dapat diakses tanpa login.

php Pengelompokan rute autentikasi Breeze
// tidak-dijalankan
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware('guest')->group(function () {
    Route::get('register', [RegisteredUserController::class, 'create'])->name('register');
    Route::post('register', [RegisteredUserController::class, 'store']);
    Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
    Route::post('login', [AuthenticatedSessionController::class, 'store']);
});

Rute yang terbentuk dapat dilihat melalui route:list. Keluarannya memperlihatkan dua puluh rute autentikasi yang semuanya mengarah ke controller di namespace Auth.

bash
# tidak-dijalankan
# melihat rute yang ditambahkan Breeze
php artisan route:list --except-vendor
text Hasil perintah route:list

  GET|HEAD  / ............................................... routes/web.php:6
  GET|HEAD  confirm-password password.confirm › Auth\ConfirmablePasswordContr…
  POST      confirm-password ........ Auth\ConfirmablePasswordController@store
  GET|HEAD  dashboard .......................... dashboard › routes/web.php:10
  POST      email/verification-notification verification.send › Auth\EmailVer…
  GET|HEAD  forgot-password password.request › Auth\PasswordResetLinkControll…
  POST      forgot-password password.email › Auth\PasswordResetLinkController…
  GET|HEAD  login ......... login › Auth\AuthenticatedSessionController@create
  POST      login .................. Auth\AuthenticatedSessionController@store
  POST      logout ...... logout › Auth\AuthenticatedSessionController@destroy
  PUT       password ........ password.update › Auth\PasswordController@update
  GET|HEAD  profile .................... profile.edit › ProfileController@edit
  PATCH     profile ................ profile.update › ProfileController@update
  DELETE    profile .............. profile.destroy › ProfileController@destroy
  GET|HEAD  register ......... register › Auth\RegisteredUserController@create
  POST      register ..................... Auth\RegisteredUserController@store
  POST      reset-password . password.store › Auth\NewPasswordController@store
  GET|HEAD  reset-password/{token} password.reset › Auth\NewPasswordControlle…
  GET|HEAD  verify-email verification.notice › Auth\EmailVerificationPromptCo…
  GET|HEAD  verify-email/{id}/{hash} verification.verify › Auth\VerifyEmailCo…

                                                           Showing [20] routes

Controller yang dihasilkan menggunakan mekanisme yang sama dengan autentikasi yang ditulis manual, yaitu percobaan kredensial, regenerasi session, dan pengalihan ke tujuan sebelumnya. Potongan berikut diambil dari controller login Breeze.

php Metode login dan logout pada controller Breeze
// tidak-dijalankan
public function store(LoginRequest $request): RedirectResponse
{
    $request->authenticate();

    $request->session()->regenerate();

    return redirect()->intended(route('dashboard', absolute: false));
}

public function destroy(Request $request): RedirectResponse
{
    Auth::guard('web')->logout();

    $request->session()->invalidate();

    $request->session()->regenerateToken();

    return redirect('/');
}

Kustomisasi setelah instalasi#

Kode yang diterbitkan Breeze langsung menjadi milik proyek, sehingga penyesuaiannya dilakukan pada kode itu sendiri dan tidak melalui konfigurasi paket. Perubahan yang paling sering dilakukan adalah mengganti isi halaman dashboard, mengubah tujuan pengalihan setelah login pada redirect()->intended(), serta menyunting tampilan login dan register yang ditata dengan Tailwind CSS. Karena seluruh berkasnya sudah diterbitkan, setiap penyesuaian cukup dilakukan pada satu tempat tanpa menimpa berkas milik vendor.

Implikasinya penting dipahami sejak awal: pembaruan versi Breeze tidak otomatis diterapkan pada proyek. Paket Composer-nya hanya menjadi alat penerbitan berkas, dan berkas yang sudah diterbitkan tidak lagi menerima pembaruan dari paket tersebut. Pembaruan keamanan framework tetap diperoleh melalui composer update pada laravel/framework, sedangkan perbaikan pada templat maupun controller hasil scaffolding diterapkan secara manual dengan membaca catatan rilis Breeze.

Rangkaian pengujian yang ikut diterbitkan menjadi pengaman ketika kustomisasi dimulai. Perintah php artisan test menjalankan enam kelas pengujian autentikasi yang menguji pendaftaran, login, pengaturan ulang kata sandi, hingga verifikasi email. Selama seluruh kasusnya tetap lulus setelah penyuntingan, perilaku inti autentikasi dapat dianggap tetap utuh.

Breeze, Jetstream, dan Fortify#

Breeze bukan satu-satunya starter kit resmi. Laravel juga menyediakan Jetstream untuk titik awal aplikasi yang lebih kaya fitur dan Fortify untuk bagian backend autentikasi tanpa tampilan. Perbedaan ketiganya terletak pada bentuk keluaran dan cakupan fiturnya.

PaketBentuk keluaranTumpukan antarmukaCakupan fitur
BreezeScaffolding dengan tampilan siap pakaiBlade, Livewire, React, atau VueLogin, register, reset kata sandi, verifikasi email, konfirmasi kata sandi
JetstreamAplikasi starter lengkapLivewire atau InertiaFitur Breeze ditambah autentikasi dua faktor, manajemen profil, API token, dan manajemen tim
FortifyBackend tanpa tampilanBebas, antarmuka ditulis sendiriRute dan logika autentikasi saja, tanpa tampilan

Pemilihan paket mengikuti kebutuhan proyek. Breeze cocok ketika autentikasi standar dibutuhkan segera dan tampilannya akan disunting bebas. Jetstream dipilih ketika fitur seperti autentikasi dua faktor dibutuhkan sejak awal. Fortify dipilih ketika antarmuka dibangun sepenuhnya sendiri, misalnya dengan frontend terpisah, tetapi logika autentikasi tidak perlu ditulis ulang dari nol.

Kesalahan umum#

Kesalahan pertama adalah menjalankan breeze:install pada proyek yang sudah berjalan tanpa menyiapkan sistem kendali versi. Perintah ini menyunting banyak berkas sekaligus, termasuk mengganti halaman utama dan menambah berkas rute, sehingga perubahan yang tidak diinginkan sulit dilacak apabila tidak ada riwayat commit untuk dibandingkan. Salinan proyek terpisah atau setidaknya satu commit bersih sebelum instalasi memudahkan peninjauan seluruh perubahan yang dihasilkan paket.

Kesalahan kedua adalah mengira autentikasi langsung berfungsi tanpa menjalankan migration. Tabel users wajib ada sebelum pendaftaran pertama, dan halaman register yang baru terpasang akan berhenti dengan error database apabila skemanya belum dibangun. Perintah php artisan migrate tetap menjadi langkah wajib setelah scaffolding diterbitkan.

Kesalahan ketiga adalah membiarkan halaman dashboard tetap menampilkan konten contoh setelah paket terpasang. Konten contoh memang sengaja disertakan sebagai titik awal, tetapi membiarkannya pada aplikasi yang sudah digunakan membuat pengguna menganggap halaman tersebut sebagai bagian dari fitur. Isi halaman diganti pada iterasi pertama setelah instalasi, bersama pemeriksaan tujuan pengalihan setelah login.

Ringkasan#

  • Starter kit menerbitkan controller, rute, tampilan, dan pengujian autentikasi langsung ke dalam proyek sehingga kodenya milik proyek dan dapat disunting.
  • Breeze diinstal dengan composer require laravel/breeze --dev lalu php artisan breeze:install <stack>, dan tumpukan Blade-nya menghasilkan sekitar dua puluh rute autentikasi.
  • Rute Breeze dipisahkan menurut middleware: guest untuk halaman login dan register, serta auth untuk halaman yang membutuhkan login.
  • Jetstream menambahkan fitur seperti autentikasi dua faktor dan manajemen tim, sedangkan Fortify hanya menyediakan backend autentikasi tanpa tampilan.

Referensi#