Laravel, framework PHP yang elegan dan bertenaga ini, memudahkan kita untuk membangun aplikasi web modern, termasuk sistem login dan register yang aman dan efisien. Jika kamu sedang mencari panduan lengkap cara membuat sistem login dan register dengan Laravel, kamu berada di tempat yang tepat! Artikel ini akan membimbingmu langkah demi langkah, dari persiapan awal hingga implementasi fitur-fitur keamanan penting. Yuk, kita mulai!
1. Persiapan Awal: Install Laravel dan Konfigurasi Database
Sebelum kita menyelam lebih dalam, pastikan kamu sudah memiliki Laravel terinstall di komputermu. Jika belum, jangan khawatir! Ikuti langkah-langkah sederhana berikut:
-
Pastikan PHP dan Composer Terinstall: Laravel membutuhkan PHP (minimal versi 7.4) dan Composer (dependency manager untuk PHP). Pastikan keduanya sudah terinstall di sistemmu. Kamu bisa mendownload PHP dari php.net dan Composer dari getcomposer.org.
-
Membuat Project Laravel Baru: Buka terminal (command prompt) dan navigasikan ke direktori tempat kamu ingin menyimpan projectmu. Kemudian, jalankan perintah berikut:
composer create-project laravel/laravel nama-projectGanti
nama-projectdengan nama yang kamu inginkan untuk project Laravelmu. Proses ini akan mengunduh dan menginstall semua dependencies yang dibutuhkan oleh Laravel. -
Konfigurasi Database: Laravel membutuhkan database untuk menyimpan informasi user (nama, email, password, dll.). Buka file
.envdi root projectmu dan atur konfigurasi database sesuai dengan setting database yang kamu miliki. Contoh:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=nama_database DB_USERNAME=nama_user DB_PASSWORD=password_databasePastikan kamu sudah membuat database dengan nama
nama_databasedi server databasemu (misalnya MySQL atau MariaDB).
Setelah langkah-langkah ini selesai, project Laravelmu siap digunakan! Sekarang kita lanjut ke langkah berikutnya, yaitu membuat migration untuk tabel users.
2. Membuat Migration dan Model untuk User
Database adalah jantung dari sistem login dan register. Kita perlu membuat struktur tabel yang tepat untuk menyimpan informasi user. Laravel memudahkan hal ini dengan menggunakan migration.
-
Membuat Migration: Jalankan perintah berikut di terminal:
php artisan make:migration create_users_tablePerintah ini akan membuat file migration baru di folder
database/migrations. Buka file tersebut (dengan nama sepertiYYYY_MM_DD_HHMMSS_create_users_table.php). -
Definisi Skema Tabel: Modifikasi method
up()di dalam file migration untuk mendefinisikan struktur tabelusers. Secara default, Laravel sudah menyediakan beberapa kolom penting sepertiid,name,email,email_verified_at,password, danremember_token. Kamu bisa menambahkan kolom lain jika dibutuhkan, misalnyaphone_number,address, dll. Contoh:<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('phone_number')->nullable(); // Contoh kolom tambahan $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }Perhatikan penggunaan
$table->string('phone_number')->nullable();. Ini adalah contoh penambahan kolomphone_numberyang bersifat opsional (boleh kosong). -
Menjalankan Migration: Setelah selesai mendefinisikan skema tabel, jalankan perintah berikut untuk menerapkan migration ke database:
php artisan migratePerintah ini akan membuat tabel
usersdi database yang kamu konfigurasi sebelumnya. -
Membuat Model User: Meskipun Laravel sudah menyediakan model
Usersecara default diapp/Models/User.php, ada baiknya untuk diperiksa dan disesuaikan jika ada kolom tambahan yang kamu tambahkan di migration. Biasanya tidak perlu ada perubahan signifikan kecuali kamu menambahkan relationship ke tabel lain.
Sekarang kita sudah memiliki tabel users di database dan model User yang sesuai. Selanjutnya, kita akan membuat route dan controller untuk menangani proses login dan register.
3. Membuat Route untuk Login dan Register
Routes adalah titik masuk untuk aplikasi Laravel kita. Kita perlu mendefinisikan route yang tepat untuk menangani permintaan login dan register.
-
Mendefinisikan Route: Buka file
routes/web.phpdan tambahkan route berikut:<?php use IlluminateSupportFacadesRoute; use AppHttpControllersAuthController; // Pastikan import ini ada Route::get('/register', [AuthController::class, 'showRegistrationForm'])->name('register'); Route::post('/register', [AuthController::class, 'register']); Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login'); Route::post('/login', [AuthController::class, 'login']); Route::get('/logout', [AuthController::class, 'logout'])->name('logout'); // Route untuk logout Route::get('/home', function () { return view('home'); // Buat view 'home.blade.php' })->middleware('auth')->name('home');Pastikan kamu sudah mengimpor
AuthControllerdi bagian atas fileroutes/web.php. Route di atas mendefinisikan:GET /register: Menampilkan form registrasi.POST /register: Memproses data registrasi.GET /login: Menampilkan form login.POST /login: Memproses data login.GET /logout: Proses logout user.GET /home: Halaman home yang hanya bisa diakses oleh user yang sudah login (menggunakan middlewareauth).
Selanjutnya, kita akan membuat controller AuthController yang akan menangani logika bisnis untuk route-route ini.
4. Membuat Controller AuthController
Controller adalah tempat kita menulis logika bisnis untuk menangani permintaan HTTP. Kita akan membuat controller AuthController untuk menangani proses login dan register.
-
Membuat Controller: Jalankan perintah berikut di terminal:
php artisan make:controller AuthControllerPerintah ini akan membuat file controller baru di folder
app/Http/Controllers. -
Implementasi Method di Controller: Buka file
app/Http/Controllers/AuthController.phpdan tambahkan method-method berikut:<?php namespace AppHttpControllers; use IlluminateHttpRequest; use AppModelsUser; use IlluminateSupportFacadesHash; use IlluminateSupportFacadesAuth; use IlluminateSupportFacadesValidator; class AuthController extends Controller { public function showRegistrationForm() { return view('auth.register'); // Buat view 'auth/register.blade.php' } public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8|confirmed', ]); if ($validator->fails()) { return redirect('register') ->withErrors($validator) ->withInput(); } $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), ]); Auth::login($user); return redirect('/home'); } public function showLoginForm() { return view('auth.login'); // Buat view 'auth/login.blade.php' } public function login(Request $request) { $credentials = $request->validate([ 'email' => ['required', 'email'], 'password' => ['required'], ]); if (Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended('/home'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } }Penjelasan kode:
showRegistrationForm(): Menampilkan view untuk form registrasi (auth/register.blade.php).register():- Memvalidasi input dari form registrasi menggunakan
Validator. - Membuat user baru di database menggunakan model
Userdan fungsiHash::make()untuk mengenkripsi password. - Melakukan login user secara otomatis setelah registrasi berhasil menggunakan
Auth::login(). - Redirect user ke halaman
/home.
- Memvalidasi input dari form registrasi menggunakan
showLoginForm(): Menampilkan view untuk form login (auth/login.blade.php).login():- Memvalidasi input dari form login.
- Mencoba melakukan login menggunakan
Auth::attempt(). - Jika login berhasil, meregenerasi session dan redirect user ke halaman
/home. - Jika login gagal, menampilkan pesan error.
logout():- Melakukan logout user menggunakan
Auth::logout(). - Menginvalidate dan meregenerasi session dan token.
- Redirect user ke halaman
/.
- Melakukan logout user menggunakan
Sekarang kita sudah memiliki controller yang menangani logika login dan register. Langkah selanjutnya adalah membuat view untuk form registrasi dan login.
5. Membuat View untuk Form Registrasi dan Login (Blade Templates)
View adalah tampilan antarmuka yang dilihat oleh user. Kita akan membuat view menggunakan Blade, template engine bawaan Laravel.
-
Membuat Folder
authdiresources/views: Buat folder bernamaauthdi dalam folderresources/views. Folder ini akan menyimpan view-view yang berhubungan dengan autentikasi. -
Membuat
register.blade.php: Buat file bernamaregister.blade.phpdi dalam folderresources/views/auth. Isi file tersebut dengan kode berikut:@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Register') }}</div> <div class="card-body"> <form method="POST" action="{{ route('register') }}"> @csrf <div class="row mb-3"> <label for="name" class="col-md-4 col-form-label text-md-end">{{ __('Name') }}</label> <div class="col-md-6"> <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus> @error('name') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="row mb-3"> <label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email"> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="row mb-3"> <label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="row mb-3"> <label for="password-confirm" class="col-md-4 col-form-label text-md-end">{{ __('Confirm Password') }}</label> <div class="col-md-6"> <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password"> </div> </div> <div class="row mb-0"> <div class="col-md-6 offset-md-4"> <button type="submit" class="btn btn-primary"> {{ __('Register') }} </button> </div> </div> </form> </div> </div> </div> </div> </div> @endsection -
Membuat
login.blade.php: Buat file bernamalogin.blade.phpdi dalam folderresources/views/auth. Isi file tersebut dengan kode berikut:@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Login') }}</div> <div class="card-body"> <form method="POST" action="{{ route('login') }}"> @csrf <div class="row mb-3"> <label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Email Address') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="row mb-3"> <label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="row mb-3"> <div class="col-md-6 offset-md-4"> <div class="form-check"> <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> <label class="form-check-label" for="remember"> {{ __('Remember Me') }} </label> </div> </div> </div> <div class="row mb-0"> <div class="col-md-8 offset-md-4"> <button type="submit" class="btn btn-primary"> {{ __('Login') }} </button> @if (Route::has('password.request')) <a class="btn btn-link" href="{{ route('password.request') }}"> {{ __('Forgot Your Password?') }} </a> @endif </div> </div> </form> </div> </div> </div> </div> </div> @endsection -
Membuat
home.blade.php: Buat file bernamahome.blade.phpdi dalam folderresources/views. Isi file tersebut dengan kode berikut:@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">{{ __('Dashboard') }}</div> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif {{ __('You are logged in!') }} </div> </div> </div> </div> </div> @endsection -
Membuat
layouts/app.blade.php: Buat folder bernamalayoutsdi dalamresources/views. Buat file bernamaapp.blade.phpdi dalam folderresources/views/layouts. File ini akan menjadi layout dasar untuk semua view kita. Contoh sederhana:<!doctype html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- CSRF Token --> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>{{ config('app.name', 'Laravel') }}</title> <!-- Scripts --> <script src="{{ asset('js/app.js') }}" defer></script> <!-- Fonts --> <link rel="dns-prefetch" href="//fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet"> <!-- Styles --> <link href="{{ asset('css/app.css') }}" rel="stylesheet"> </head> <body> <div id="app"> <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm"> <div class="container"> <a class="navbar-brand" href="{{ url('/') }}"> {{ config('app.name', 'Laravel') }} </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <!-- Left Side Of Navbar --> <ul class="navbar-nav me-auto"> </ul> <!-- Right Side Of Navbar --> <ul class="navbar-nav ms-auto"> <!-- Authentication Links --> @guest @if (Route::has('login')) <li class="nav-item"> <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a> </li> @endif @if (Route::has('register')) <li class="nav-item"> <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a> </li> @endif @else <li class="nav-item dropdown"> <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> {{ Auth::user()->name }} </a> <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> {{ __('Logout') }} </a> <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none"> @csrf </form> </div> </li> @endguest </ul> </div> </div> </nav> <main class="py-4"> @yield('content') </main> </div> </body> </html>Kode di atas menggunakan Bootstrap untuk styling dasar. Pastikan kamu sudah menginstall
laravel/uimenggunakancomposer require laravel/uidan kemudian menjalankanphp artisan ui bootstrap --authuntuk generate file-file CSS dan JS Bootstrap. Atau, kamu bisa menggunakan CDN Bootstrap.
Sekarang kita sudah memiliki form registrasi dan login. Kamu bisa mengakses halaman registrasi di /register dan halaman login di /login.
6. Validasi Input dan Keamanan Password
Validasi input sangat penting untuk mencegah data yang tidak valid masuk ke database kita. Keamanan password juga merupakan prioritas utama.
-
Validasi Input: Kita sudah menggunakan
Validatordi dalam controllerAuthControlleruntuk memvalidasi input dari form registrasi dan login. Pastikan kamu memvalidasi semua input yang penting untuk mencegah error dan celah keamanan. -
Enkripsi Password: Laravel secara otomatis mengenkripsi password menggunakan
bcryptketika kita menggunakanHash::make(). Ini sangat penting untuk menjaga keamanan password user. Jangan pernah menyimpan password user dalam bentuk plain text! -
Middleware
auth: Kita menggunakan middlewareauthuntuk melindungi route/home. Middleware ini akan memastikan bahwa hanya user yang sudah login yang bisa mengakses route tersebut. -
CSRF Protection: Laravel secara otomatis menyediakan CSRF (Cross-Site Request Forgery) protection. Pastikan kamu menyertakan
@csrfdi dalam semua formmu untuk mencegah serangan CSRF. -
Sanitasi Input (Opsional): Selain validasi, kamu juga bisa melakukan sanitasi input untuk membersihkan input dari karakter-karakter yang berbahaya.
7. Menambahkan Fitur Lanjutan (Opsional)
Setelah sistem login dan register dasar berfungsi, kamu bisa menambahkan fitur-fitur lanjutan seperti:
- Verifikasi Email: Mengirim email verifikasi ke user setelah registrasi untuk memastikan alamat email mereka valid.
- Reset Password: Memungkinkan user untuk mereset password mereka jika lupa.
- Login dengan Akun Sosial Media (Socialite): Memungkinkan user untuk login menggunakan akun Google, Facebook, Twitter, dll.
- Two-Factor Authentication (2FA): Menambahkan lapisan keamanan tambahan dengan meminta user untuk memasukkan kode verifikasi dari aplikasi authenticator atau SMS selain password.
- Roles dan Permissions: Menentukan role dan permission untuk user, sehingga user dengan role tertentu bisa mengakses fitur-fitur tertentu.
8. Pengujian Sistem Login dan Register
Pengujian sangat penting untuk memastikan sistem login dan register kita berfungsi dengan benar.
-
Uji Semua Skenario: Uji semua skenario yang mungkin terjadi, seperti:
- Registrasi dengan data yang valid.
- Registrasi dengan data yang tidak valid (misalnya email sudah terdaftar).
- Login dengan kredensial yang benar.
- Login dengan kredensial yang salah.
- Logout.
- Mencoba mengakses halaman
/homesebelum login. - Mencoba mengakses halaman
/homesetelah logout.
-
Gunakan Tools Pengujian: Kamu bisa menggunakan tools pengujian seperti PHPUnit untuk menulis test case otomatis.
9. SEO Optimization
Karena kita sedang membahas cara membuat sistem login dan register dengan Laravel, penting untuk memastikan artikel ini juga SEO friendly.
- Keyword Density: Pastikan keyword “Cara Membuat Sistem Login dan Register dengan Laravel” muncul secara alami di seluruh artikel, termasuk di judul, subheading, dan isi artikel.
- Meta Description: Tambahkan meta description yang menarik dan relevan ke halaman ini.
- Alt Text untuk Gambar: Gunakan alt text yang deskriptif untuk semua gambar yang kamu gunakan di artikel ini.
- Internal dan External Linking: Tambahkan link internal ke artikel lain yang relevan di website kamu dan link eksternal ke sumber-sumber terpercaya.
- Mobile-Friendly: Pastikan website kamu mobile-friendly.
10. Troubleshooting Umum
Berikut beberapa masalah umum yang mungkin kamu hadapi saat membuat sistem login dan register dengan Laravel, beserta solusinya:
- Error “Class ‘AppHttpControllersAuthController’ not found”: Pastikan kamu sudah mengimpor
AuthControllerdi fileroutes/web.php:use AppHttpControllersAuthController;. - Error “SQLSTATE[HY000] [1045] Access denied for user …”: Periksa kembali konfigurasi database di file
.env. Pastikan username dan password database sudah benar. - Halaman Login/Register tidak tampil: Periksa kembali routes di
routes/web.phpdan pastikan controller dan view sudah dibuat dengan benar. - Error Validasi: Pastikan kamu sudah menangani error validasi dengan benar di controller dan menampilkan pesan error di view.
11. Kesimpulan: Sistem Login dan Register dengan Laravel yang Aman dan Efisien
Selamat! Kamu sudah berhasil mengikuti panduan lengkap cara membuat sistem login dan register dengan Laravel. Dengan Laravel, kamu bisa membangun sistem autentikasi yang aman, efisien, dan mudah dikembangkan. Ingatlah untuk selalu memprioritaskan keamanan, validasi input, dan enkripsi password. Teruslah belajar dan bereksperimen dengan fitur-fitur Laravel lainnya untuk membuat aplikasi web yang lebih canggih!
Semoga panduan ini bermanfaat! Jangan ragu untuk bertanya jika kamu memiliki pertanyaan. Selamat ngoding!



