Membuat Login dan Register pada Laravel (Manual Tanpa Starter Kit)
Pada tutorial ini kamu akan belajar cara membuat fitur Login dan Register pada Laravel secara manual. Artinya, kita tidak memakai Laravel Breeze, Jetstream, atau UI scaffolding lain. Kamu akan membangun proses login, session, middleware, dan register dari dasar. Metode ini cocok untuk kamu yang ingin memahami autentikasi Laravel secara lebih dalam, karena kamu akan melihat alur data dari form, masuk ke controller, divalidasi oleh Auth, dicek ke database, lalu dibuatkan session, sampai akhirnya user bisa mengakses halaman yang dilindungi middleware.
Aplikasi contoh yang kita gunakan bernama ANISA, singkatan dari Aplikasi Nilai Santri. Studi kasusnya sederhana, tetapi cukup realistis untuk latihan karena memiliki konsep user, role, dan halaman home yang hanya boleh diakses setelah login. Pada akhir tutorial, kamu akan memiliki sistem autentikasi yang berfungsi. User bisa login. User bisa logout. User yang belum login tidak bisa mengakses halaman home. Kamu juga akan menyiapkan struktur agar nantinya register bisa dibuat dengan rapi dan aman.
Konsep Dasar Login dan Register pada Laravel
Sebelum mulai mengetik kode, kamu perlu memahami konsep dasar yang dipakai Laravel dalam sistem autentikasi. Laravel menyediakan komponen Auth yang sudah terintegrasi dengan sistem session, hashing password, middleware, dan database user. Komponen ini membuat proses autentikasi jauh lebih mudah dibanding membangun semuanya dari nol. Namun pada tutorial ini, kita tetap membuat tampilan dan alur login secara manual agar kamu benar-benar memahami bagaimana semua bagian saling terhubung.
Di Laravel, login biasanya dilakukan dengan memanggil Auth::attempt(). Method ini menerima array berisi field yang ingin dicocokkan dengan tabel users. Biasanya yang dipakai adalah email dan password. Auth::attempt() akan memeriksa apakah email ada di database. Jika ada, Laravel akan mengambil password yang tersimpan di database. Password itu biasanya berbentuk hash bcrypt. Laravel akan membandingkan password input user dengan hash yang tersimpan. Jika cocok, maka user dianggap berhasil login dan session autentikasi akan dibuat.
Setelah session dibuat, Laravel akan menganggap user itu sudah login. Kamu bisa mengambil data user kapan saja menggunakan Auth::user(). Kamu juga bisa mengecek status login menggunakan Auth::check(). Lalu untuk membatasi akses halaman tertentu, kamu bisa memakai middleware auth. Middleware ini akan memeriksa session. Jika user belum login, middleware akan mengarahkan user kembali ke halaman login.
Register juga memiliki konsep yang sama pentingnya. Saat user mendaftar, data harus disimpan ke tabel users. Password tidak boleh disimpan dalam bentuk teks biasa. Password wajib di-hash dengan bcrypt. Laravel menyediakan helper bcrypt() atau Hash::make(). Setelah user terdaftar, kamu bisa memilih apakah user langsung login otomatis atau tetap diminta login manual.
Membuat Login Laravel

Sekarang kita mulai langkah-langkah pembuatan login.
1. Membuat Project Laravel Baru
Langkah pertama adalah membuat project Laravel baru. Pastikan komputer kamu sudah terinstall Composer, PHP, dan MySQL. Versi PHP yang digunakan sebaiknya mengikuti rekomendasi Laravel terbaru. Jika kamu memakai Laravel 9 atau Laravel 10, pastikan PHP minimal 8.0 atau 8.1 sesuai dokumentasi.
Buka terminal atau CMD, lalu jalankan perintah berikut:
composer create-project --prefer-dist laravel/laravel anisa
Perintah ini akan membuat folder baru bernama anisa. Di dalamnya berisi struktur project Laravel lengkap. Composer akan mengunduh semua dependency yang dibutuhkan Laravel. Proses ini mungkin membutuhkan waktu beberapa menit, tergantung koneksi internet kamu.
Setelah proses selesai, masuk ke folder project:
cd anisa
Lalu jalankan server lokal Laravel:
php artisan serve
Jika berhasil, terminal akan menampilkan informasi bahwa server berjalan di alamat:
http://127.0.0.1:8000
Sekarang buka browser kamu, lalu akses:
http://localhost:8000
Jika Laravel berhasil berjalan, kamu akan melihat halaman default Laravel. Halaman ini biasanya berisi logo Laravel dan beberapa link dokumentasi. Ini menandakan project sudah siap digunakan.
Pada tahap ini, kamu belum membuat apa-apa. Namun kamu sudah punya pondasi project Laravel yang bersih dan siap dikembangkan.
2. Membuat Database untuk Project
Setelah project dibuat, langkah berikutnya adalah menyiapkan database. Laravel mendukung banyak jenis database, seperti MySQL, PostgreSQL, SQLite, dan SQL Server. Pada tutorial ini kita memakai MySQL karena paling umum dipakai di hosting dan server lokal.
Buat database baru dengan nama:
anisa_db
Kamu bisa membuat database ini menggunakan phpMyAdmin, MySQL Workbench, DBeaver, HeidiSQL, SQLyog, atau tools lain. Jika kamu memakai phpMyAdmin, kamu cukup masuk ke menu Database, lalu buat database baru dengan nama anisa_db.
Pastikan database ini kosong dan belum ada tabel.
Database ini nanti akan diisi oleh migration Laravel. Jadi kamu tidak perlu membuat tabel manual.
3. Konfigurasi Database di File .env
Laravel menggunakan file .env untuk menyimpan konfigurasi environment. File ini berisi konfigurasi aplikasi, termasuk konfigurasi database.
Buka file .env di root project. Cari bagian berikut:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Ubah menjadi seperti ini:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=anisa_db
DB_USERNAME=root
DB_PASSWORD="********"
Ganti username dan password sesuai database kamu.
Jika kamu memakai XAMPP, biasanya username adalah root dan password kosong. Jika password kosong, kamu bisa menulis:
DB_PASSWORD=
Jika kamu memakai Laragon atau setup MySQL lain, sesuaikan.
Setelah konfigurasi benar, Laravel akan bisa terhubung ke database.
Cara cepat memastikan koneksi database benar adalah menjalankan migration. Jika migration berhasil, berarti konfigurasi database sudah benar.
4. Membuat Tabel Users Menggunakan Migration
Laravel menyediakan migration default untuk tabel users. Migration ini sudah tersedia sejak awal project dibuat. Migration ini akan membuat tabel users yang memiliki kolom standar untuk autentikasi.
Untuk menjalankan migration, jalankan perintah:
php artisan migrate
Jika koneksi database benar, Laravel akan membuat beberapa tabel, seperti:
userspassword_resetsfailed_jobspersonal_access_tokensmigrations
Setelah migration selesai, kamu bisa cek database di phpMyAdmin. Kamu akan melihat tabel-tabel tersebut sudah terbentuk.
Tabel users biasanya memiliki struktur seperti berikut:
id(bigint, primary key)name(varchar)email(varchar, unique)email_verified_at(timestamp, nullable)password(varchar)remember_token(varchar, nullable)created_at(timestamp)updated_at(timestamp)
Tabel users ini adalah inti dari sistem login.
Laravel Auth akan memeriksa data login berdasarkan tabel ini.
5. Pengaturan Tambahan (Optional): Menambahkan Kolom Role
Pada aplikasi ANISA, kita ingin memiliki level user. Contohnya admin, guru, atau santri. Untuk itu, kita butuh kolom tambahan di tabel users.
Kolom tambahan ini biasanya dinamakan role.
Cara menambahkannya adalah membuat migration baru.
Jalankan perintah:
php artisan make:migration add_role_to_users_table
Laravel akan membuat file migration baru di folder database/migrations.
Buka file migration tersebut, lalu isi method up() seperti ini:
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('role')->default('santri')->after('password');
});
}
Lalu isi method down() seperti ini:
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('role');
});
}
Setelah itu jalankan:
php artisan migrate
Sekarang tabel users akan memiliki kolom role.
Dengan adanya kolom role, kamu bisa membedakan user berdasarkan hak akses. Kamu bisa menampilkan role di halaman home. Kamu juga bisa mengembangkan middleware khusus untuk membatasi akses berdasarkan role.
6. Membuat Route Login, Home, dan Logout
Sekarang kita mulai membuat alur login.
Buka file:
routes/web.php
Lalu isi dengan route berikut:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\HomeController;
Route::get('/', [LoginController::class, 'login'])->name('login');
Route::post('actionlogin', [LoginController::class, 'actionlogin'])->name('actionlogin');
Route::get('home', [HomeController::class, 'index'])->name('home')->middleware('auth');
Route::get('actionlogout', [LoginController::class, 'actionlogout'])->name('actionlogout')->middleware('auth');
Penjelasan route:
Route::get('/')digunakan untuk menampilkan form login.Route::post('actionlogin')digunakan untuk memproses login.Route::get('home')digunakan untuk menampilkan halaman home jika login berhasil.Route::get('actionlogout')digunakan untuk logout.
Pada route home dan actionlogout terdapat middleware auth. Ini memastikan halaman tersebut hanya bisa diakses jika user sudah login.
7. Membuat LoginController
Sekarang kita membuat controller untuk login.
Jalankan perintah:
php artisan make:controller LoginController
Laravel akan membuat file:
app/Http/Controllers/LoginController.php
Buka file tersebut, lalu isi seperti ini:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Session;
class LoginController extends Controller
{
public function login()
{
if (Auth::check()) {
return redirect('home');
} else {
return view('login');
}
}
public function actionlogin(Request $request)
{
$data = [
'email' => $request->input('email'),
'password' => $request->input('password'),
];
if (Auth::attempt($data)) {
return redirect('home');
} else {
Session::flash('error', 'Email atau Password Salah');
return redirect('/');
}
}
public function actionlogout()
{
Auth::logout();
return redirect('/');
}
}
Penjelasan penting:
Pada bagian:
use Illuminate\Support\Facades\Auth;
Ini adalah library Laravel yang menangani autentikasi.
Pada bagian:
use Session;
Ini dipakai untuk mengirim pesan error ke halaman login.
Pada bagian:
Auth::check()
Digunakan untuk memeriksa apakah user sudah login atau belum.
Pada bagian:
Auth::attempt($data)
Digunakan untuk mencocokkan email dan password ke tabel users.
Jika berhasil, Laravel akan membuat session login.
Pada bagian:
Auth::logout()
Digunakan untuk menghapus session login.
8. Membuat HomeController
Buat HomeController dengan perintah:
php artisan make:controller HomeController
Buka file:
app/Http/Controllers/HomeController.php
Isi file:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index()
{
return view('home');
}
}
Controller ini hanya menampilkan view home.
9. Membuat View Login (login.blade.php)
Sekarang kita membuat tampilan halaman login.
Buat file:
resources/views/login.blade.php
Isi file dengan kode berikut:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Login - Aplikasi Nilai Santri</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container"><br>
<div class="col-md-4 col-md-offset-4">
<h2 class="text-center"><b>ANISA</b><br>Aplikasi Nilai Santri</h2>
<hr>
@if(session('error'))
<div class="alert alert-danger">
<b>Opps!</b> {{session('error')}}
</div>
@endif
<form action="{{ route('actionlogin') }}" method="post">
@csrf
<div class="form-group">
<label>Email</label>
<input type="email" name="email" class="form-control" placeholder="Email" required="">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control" placeholder="Password" required="">
</div>
<button type="submit" class="btn btn-primary btn-block">Log In</button>
<hr>
<p class="text-center">Belum punya akun? <a href="{{ route('register') }}">Register</a> sekarang!</p>
</form>
</div>
</div>
</body>
</html>
Penjelasan:
Pada bagian @csrf, Laravel akan membuat token keamanan.
CSRF adalah singkatan dari Cross-site request forgery.
Ini adalah serangan yang memanfaatkan request palsu dari user yang tidak terautentikasi.
Dengan CSRF token, Laravel memastikan request berasal dari form milik aplikasi.
Saat kamu menulis @csrf, Laravel otomatis membuat input hidden seperti berikut:
<input type="hidden" name="_token" value="TOKEN_RANDOM">
10. Membuat Template Master dan Halaman Home
Sekarang kita membuat halaman home.
Karena halaman home biasanya memiliki layout yang konsisten, kita buat template master.
Buat file:
resources/views/master.blade.php
Isi file:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Aplikasi Nilai Santri</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div class="container">
<div class="col-md-12">
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{route('home')}}">ANISA - Aplikasi Nilai Santri</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="fa fa-user"></i> {{Auth::user()->email}} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a>Level: {{Auth::user()->role}}</a></li>
<li role="separator" class="divider"></li>
<li><a href="{{route('actionlogout')}}"><i class="fa fa-power-off"></i> Log Out</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
@yield('konten')
</div>
</div>
</body>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</html>
Sekarang buat view home.
Buat file:
resources/views/home.blade.php
Isi file:
@extends('master')
@section('konten')
<h4>Selamat Datang <b>{{Auth::user()->name}}</b>, Anda Login sebagai <b>{{Auth::user()->role}}</b>.</h4>
@endsection
Penjelasan:
Pada bagian:
{{Auth::user()->name}}
Digunakan untuk menampilkan nama user yang sedang login.
Pada bagian:
{{Auth::user()->role}}
Digunakan untuk menampilkan role user yang sedang login.
Laravel menyimpan data user dalam session Auth setelah login berhasil.
Karena itu, data user bisa dipanggil kapan saja selama session masih aktif.
Catatan Penting: User Harus Ada di Database
Sampai di tahap ini, login sudah selesai.
Namun kamu perlu ingat satu hal penting.
Migration tabel users tidak otomatis mengisi data user.
Artinya, tabel users masih kosong.
Jika tabel kosong, kamu tidak bisa login.
Karena Auth::attempt() hanya bisa berhasil jika email dan password cocok dengan data yang ada di database.
Cara Membuat User untuk Login
Ada beberapa cara untuk membuat user.
Cara paling cepat adalah menggunakan Laravel Tinker.
Jalankan:
php artisan tinker
Lalu masukkan kode berikut:
use App\Models\User;
User::create([
'name' => 'Admin',
'email' => 'admin@gmail.com',
'password' => bcrypt('123456'),
'role' => 'admin'
]);
Sekarang kamu bisa login dengan data berikut:
- Email:
admin@gmail.com - Password:
123456
Membuat Register User Laravel
Setelah login selesai, sekarang kita membuat fitur register.
Fitur register akan menambahkan data user baru ke tabel users.
Kita akan membuat:
- route register
- controller register
- view register
- validasi form
- hashing password
- redirect setelah berhasil
1. Membuat Route Register
Buka file routes/web.php, lalu tambahkan route berikut:
use App\Http\Controllers\RegisterController;
Route::get('register', [RegisterController::class, 'register'])->name('register');
Route::post('actionregister', [RegisterController::class, 'actionregister'])->name('actionregister');
Route register digunakan untuk menampilkan form register.
Route actionregister digunakan untuk memproses data register.
2. Membuat RegisterController
Buat controller dengan perintah:
php artisan make:controller RegisterController
Buka file:
app/Http/Controllers/RegisterController.php
Isi file:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Session;
class RegisterController extends Controller
{
public function register()
{
return view('register');
}
public function actionregister(Request $request)
{
$request->validate([
'name' => 'required|min:3',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6',
]);
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
'role' => 'santri'
]);
Session::flash('success', 'Register berhasil. Silahkan login.');
return redirect('/');
}
}
Penjelasan:
Validasi dilakukan agar data yang masuk aman dan sesuai format.
Email harus unik agar tidak ada duplikasi.
Password wajib di-hash dengan Hash::make().
Role default kita set menjadi santri.
Setelah register berhasil, user diarahkan ke halaman login.
3. Membuat View Register (register.blade.php)
Buat file:
resources/views/register.blade.php
Isi file:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Register - Aplikasi Nilai Santri</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container"><br>
<div class="col-md-4 col-md-offset-4">
<h2 class="text-center"><b>ANISA</b><br>Register User</h2>
<hr>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('actionregister') }}" method="post">
@csrf
<div class="form-group">
<label>Nama</label>
<input type="text" name="name" class="form-control" placeholder="Nama Lengkap" required="">
</div>
<div class="form-group">
<label>Email</label>
<input type="email" name="email" class="form-control" placeholder="Email" required="">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control" placeholder="Password" required="">
</div>
<button type="submit" class="btn btn-success btn-block">Register</button>
<hr>
<p class="text-center">Sudah punya akun? <a href="{{ route('login') }}">Login</a> sekarang!</p>
</form>
</div>
</div>
</body>
</html>
4. Menampilkan Pesan Sukses di Halaman Login
Di RegisterController, kita mengirim pesan sukses seperti ini:
Session::flash('success', 'Register berhasil. Silahkan login.');
Sekarang tampilkan pesan itu di login.blade.php.
Tambahkan kode berikut di bawah bagian error:
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
Sekarang setelah register berhasil, user akan melihat pesan sukses di halaman login.
Testing Register dan Login
Sekarang kamu bisa melakukan testing.
- Buka halaman login.
- Klik register.
- Isi form register.
- Submit.
- Kamu akan diarahkan ke login.
- Login menggunakan akun baru.
- Kamu akan masuk halaman home.
- Klik logout.
- Kamu kembali ke login.
Jika semua berjalan normal, maka sistem login dan register sudah berhasil.
Peningkatan yang Direkomendasikan
Setelah fitur login dan register berhasil, kamu bisa meningkatkan kualitas sistem dengan beberapa hal berikut.
1. Validasi Login Lebih Lengkap
Saat ini login hanya mengambil input tanpa validasi.
Kamu bisa menambahkan:
$request->validate([
'email' => 'required|email',
'password' => 'required|min:6'
]);
2. Logout Menggunakan POST
Pada contoh ini logout menggunakan GET.
Untuk keamanan yang lebih baik, logout sebaiknya memakai POST.
3. Menambahkan Remember Me
Laravel mendukung fitur remember me.
Kamu bisa menambahkan checkbox di form login.
4. Membuat Middleware Role
Jika aplikasi kamu punya admin dan santri, kamu bisa membuat middleware untuk membatasi akses berdasarkan role.
Kesimpulan
Sekarang kamu sudah berhasil membuat sistem Login dan Register pada Laravel secara manual.
Kamu sudah memahami:
- cara membuat project Laravel
- cara konfigurasi database
- cara migration tabel users
- cara menambahkan role
- cara membuat route login dan register
- cara membuat controller login, home, dan register
- cara membuat view login, home, dan register
- cara menggunakan
Auth::attempt() - cara membatasi akses dengan middleware
auth - cara hashing password saat register
- cara logout dan menghapus session
Jika kamu ingin, saya bisa buatkan versi artikel ini yang lebih panjang lagi, 4000 sampai 6000 kata, lengkap dengan pembahasan best practice Laravel terbaru, termasuk route group, request validation terpisah, middleware role, dan struktur folder yang lebih rapi.