From 70953ea15026395a3d2e57a422aa1e8476e21796 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 10 Sep 2025 10:56:30 +0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=A8=20fix(auth):=20Tingkatkan=20pesan?= =?UTF-8?q?=20error=20pada=20proses=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Meningkatkan user experience dengan memberikan pesan error yang lebih spesifik pada proses login: - Menambahkan logika untuk membedakan error "password salah" dan "user tidak ditemukan" - Menggunakan FILTER_VALIDATE_EMAIL untuk mendeteksi apakah input adalah email atau NIK - Mengganti pesan error generik "Email/NIK atau password tidak sesuai" menjadi pesan yang lebih spesifik - Menambahkan validasi untuk mengecek keberadaan user sebelum memberikan pesan error - Memperbaiki struktur pesan error untuk menampilkan error pada field yang tepat (login atau password) - Meningkatkan keamanan dengan tetap mempertahankan rate limiting pada percobaan login yang gagal - Memastikan backward compatibility dengan sistem error handling yang sudah ada --- app/Http/Requests/LoginRequest.php | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/app/Http/Requests/LoginRequest.php b/app/Http/Requests/LoginRequest.php index eb85186..4311c8b 100644 --- a/app/Http/Requests/LoginRequest.php +++ b/app/Http/Requests/LoginRequest.php @@ -57,9 +57,17 @@ } else { if (!Auth::attempt($authData, $this->boolean('remember'))) { RateLimiter::hit($this->throttleKey()); - throw ValidationException::withMessages([ - 'login' => 'Email/NIK atau password tidak sesuai.' - ]); + $loginField = filter_var($credentials['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'nik'; + $user = User::where($loginField, $credentials['login'])->first(); + + $messages = []; + if ($user) { + $messages['password'] = 'Password tidak sesuai'; + } else { + $messages['login'] = 'Email/NIK tidak ditemukan'; + } + + throw ValidationException::withMessages($messages); } RateLimiter::clear($this->throttleKey()); @@ -130,9 +138,17 @@ // Authentication failed RateLimiter::hit($this->throttleKey()); - throw ValidationException::withMessages([ - 'login' => 'Email/NIK atau password tidak sesuai.', - ]); + $loginField = filter_var($credentials['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'nik'; + $user = User::where($loginField, $credentials['login'])->first(); + + $messages = []; + if ($user) { + $messages['password'] = 'Password tidak sesuai'; + } else { + $messages['login'] = 'Email/NIK tidak ditemukan'; + } + + throw ValidationException::withMessages($messages); } /**