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.
Butuh implementasi untuk kebutuhan bisnis?
OVLA Media membantu pengembangan dan optimasi aplikasi web, integrasi sistem, serta solusi Laravel sesuai kebutuhan perusahaan Anda.
Artikel Terkait
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
Cara Membuat Export Excel dengan Filter Tanggal di Laravel
Export Excel dengan filter tanggal memungkinkan pengguna mengunduh data berdasarkan periode tertentu. Fitur ini cocok untuk laporan transaksi, penjualan, pasien, pembayaran, absensi, dan data operasional lainnya di aplikasi Laravel.
Cara Membuat QR Code untuk Verifikasi Invoice Laravel
QR Code pada invoice dapat digunakan untuk membantu pelanggan memverifikasi keaslian dan status dokumen secara online. Dengan Laravel, QR Code dapat diarahkan ke halaman verifikasi yang menampilkan nomor invoice, tanggal, nominal, dan status pembayaran tanpa perlu membuka database secara langsung.