Cara Membuat Login Menggunakan Email atau Username di Laravel
Login Email atau Username
Pada sistem login biasa, pengguna mungkin hanya dapat masuk menggunakan email.
Contohnya:
Email : user@email.com
Password : ********Namun, sistem juga dapat dibuat agar pengguna menggunakan:
Username : tuan
Password : ********Atau:
Email : user@email.com
Password : ********Satu form dapat menangani keduanya.
1. Pastikan Kolom Username Tersedia
Tabel users perlu memiliki kolom:
id
name
username
email
passwordJika belum ada, buat migration:
php artisan make:migration add_username_to_users_tableContoh:
Schema::table('users', function (Blueprint $table) {
$table->string('username')
->unique()
->after('name');
});Kemudian:
php artisan migrateGunakan unique() agar setiap username hanya dimiliki satu akun.
2. Membuat Form Login
Contoh sederhana:
<form method="POST" action="{{ route('login') }}">
@csrf
<label>Email atau Username</label>
<input
type="text"
name="login"
value="{{ old('login') }}"
required
>
<label>Password</label>
<input
type="password"
name="password"
required
>
<button type="submit">
Login
</button>
</form>Pengguna cukup mengisi satu field:
Email atau Username3. Validasi Login
Pada controller:
$request->validate([
'login' => ['required', 'string'],
'password' => ['required', 'string'],
]);Kemudian ambil nilai login:
$login = $request->input('login');4. Tentukan Email atau Username
Gunakan pengecekan sederhana:
$field = filter_var(
$login,
FILTER_VALIDATE_EMAIL
)
? 'email'
: 'username';Jika input berbentuk:
admin@email.commaka:
field = emailJika input:
adminmaka:
field = username5. Proses Login
Gunakan Auth::attempt():
if (Auth::attempt([
$field => $login,
'password' => $request->password,
])) {
$request->session()->regenerate();
return redirect()->intended(
'/dashboard'
);
}Jika gagal:
return back()->withErrors([
'login' => 'Email, username, atau password salah.',
])->onlyInput('login');6. Contoh Controller Lengkap
Contoh sederhana:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
public function login(Request $request)
{
$request->validate([
'login' => [
'required',
'string',
],
'password' => [
'required',
'string',
],
]);
$login = $request->input('login');
$field = filter_var(
$login,
FILTER_VALIDATE_EMAIL
)
? 'email'
: 'username';
if (Auth::attempt([
$field => $login,
'password' => $request->password,
])) {
$request->session()->regenerate();
return redirect()->intended(
'/dashboard'
);
}
return back()
->withErrors([
'login' =>
'Email, username, atau password salah.',
])
->onlyInput('login');
}7. Route Login
Tambahkan route:
Route::get(
'/login',
[AuthController::class, 'showLogin']
)->name('login');
Route::post(
'/login',
[AuthController::class, 'login']
);Method untuk menampilkan halaman:
public function showLogin()
{
return view('auth.login');
}8. Pastikan Password Menggunakan Hash
Password jangan disimpan sebagai teks biasa.
Saat membuat user:
use Illuminate\Support\Facades\Hash;
User::create([
'name' => 'Administrator',
'username' => 'admin',
'email' => 'admin@example.com',
'password' => Hash::make(
'password123'
),
]);Laravel akan menggunakan hashing password untuk proses autentikasi.
9. Logout
Buat route:
Route::post(
'/logout',
[AuthController::class, 'logout']
)->name('logout');Controller:
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/login');
}10. Keamanan Login
Login email atau username tetap harus menggunakan praktik keamanan standar.
Gunakan:
Password hashing.
CSRF protection.
Session regeneration.
Rate limiting.
Validasi input.
HTTPS.
Permission dan role.
Logout yang benar.
Jangan memberikan informasi terlalu spesifik ketika login gagal.
Hindari pesan seperti:
Username ditemukan, tetapi password salah.Lebih baik:
Email, username, atau password salah.Hal ini mengurangi risiko username enumeration.
11. Tambahkan Rate Limiting
Login sebaiknya memiliki pembatasan percobaan agar tidak mudah menjadi target brute-force.
Pada Laravel modern, rate limiter dapat dikonfigurasi menggunakan RateLimiter.
Contoh konsep:
RateLimiter::for('login', function (
Request $request
) {
return Limit::perMinute(
5
)->by(
strtolower(
$request->input('login')
) . '|' .
$request->ip()
);
});Kemudian terapkan limiter pada route login sesuai mekanisme routing aplikasi.
Batas sebenarnya dapat disesuaikan dengan kebutuhan sistem.
12. Login untuk Sistem Multi-Cabang
Fitur ini juga dapat dikembangkan untuk aplikasi multi-cabang.
Contohnya:
Username : admin.bekasi
Password : ********Setelah login:
User
↓
Role
↓
Cabang
↓
Dashboard CabangData user dapat memiliki:
user_id
branch_id
role_idSehingga sistem dapat menentukan data yang boleh diakses pengguna.
13. Login Berdasarkan Email atau Username untuk API
Konsep yang sama dapat digunakan pada API Laravel.
Contohnya:
{
"login": "admin",
"password": "password123"
}Backend menentukan apakah login berisi email atau username.
Setelah berhasil, aplikasi dapat memberikan token menggunakan mekanisme autentikasi API yang digunakan aplikasi, misalnya Laravel Sanctum.
Kesalahan yang Perlu Dihindari
Username Tidak Unique
Gunakan:
$table->string('username')->unique();Password Tidak Di-hash
Jangan menyimpan:
password123langsung ke database.
Gunakan:
Hash::make($password);Tidak Regenerate Session
Setelah login berhasil:
$request->session()->regenerate();Tidak Menggunakan Rate Limit
Login tanpa pembatasan percobaan lebih rentan terhadap brute-force.
Pesan Error Terlalu Detail
Gunakan pesan umum ketika kredensial salah.
Login Laravel Bersama Ovla Media
Ovla Media dapat membantu mengembangkan sistem autentikasi Laravel untuk:
Login email atau username.
Role dan permission.
Sistem multi-cabang.
Login administrator.
Laravel Sanctum.
API authentication.
Two-factor authentication.
Reset password.
Session management.
Aplikasi bisnis custom.
Sistem login dapat disesuaikan dengan kebutuhan aplikasi seperti Point of Sales, klinik, inventory, koperasi, CRM, maupun sistem internal perusahaan.
Kesimpulan
Login menggunakan email atau username dapat dibuat dengan satu field input.
Alurnya:
User memasukkan login
↓
Cek apakah email
↓
Email → cari berdasarkan email
↓
Bukan email → cari berdasarkan username
↓
Validasi password
↓
Login berhasilKunci implementasinya adalah menentukan field berdasarkan input pengguna dan kemudian menggunakan Auth::attempt() untuk proses autentikasi.
Untuk production, jangan lupa menerapkan hashing password, HTTPS, CSRF protection, session regeneration, rate limiting, dan pesan error yang aman.
Artikel Terkait
Cara Membuat Audit Log Aktivitas Pengguna di Laravel
Audit log Laravel digunakan untuk mencatat aktivitas pengguna di dalam aplikasi, seperti login, logout, membuat data, mengubah data, dan menghapus data. Dengan audit log, administrator dapat mengetahui siapa yang melakukan perubahan, kapan aktivitas terjadi, dan data apa yang terpengaruh.
Cara Membuat Sistem Approval Bertingkat di Laravel
Sistem approval bertingkat pada Laravel memungkinkan sebuah pengajuan melewati beberapa tahap persetujuan sebelum dinyatakan selesai. Sistem ini cocok untuk pengajuan cuti, pembelian, reimbursement, dokumen, anggaran, hingga proses bisnis yang membutuhkan persetujuan beberapa level.
Cara Membuat Invoice PDF Laravel dengan Nomor Otomatis
Invoice PDF dapat dibuat secara otomatis menggunakan Laravel untuk menghasilkan dokumen tagihan yang rapi dan mudah dikirim kepada pelanggan. Nomor invoice juga dapat dibuat secara otomatis berdasarkan transaksi sehingga setiap invoice memiliki identitas yang unik dan mudah dilacak