🚨 fix(auth): Tingkatkan pesan error pada proses login

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
This commit is contained in:
Daeng Deni Mardaeni
2025-09-10 10:56:30 +07:00
parent 228a4f8dc7
commit 70953ea150

View File

@@ -57,9 +57,17 @@
} else { } else {
if (!Auth::attempt($authData, $this->boolean('remember'))) { if (!Auth::attempt($authData, $this->boolean('remember'))) {
RateLimiter::hit($this->throttleKey()); RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([ $loginField = filter_var($credentials['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'nik';
'login' => 'Email/NIK atau password tidak sesuai.' $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()); RateLimiter::clear($this->throttleKey());
@@ -130,9 +138,17 @@
// Authentication failed // Authentication failed
RateLimiter::hit($this->throttleKey()); RateLimiter::hit($this->throttleKey());
throw ValidationException::withMessages([ $loginField = filter_var($credentials['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'nik';
'login' => 'Email/NIK atau password tidak sesuai.', $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);
} }
/** /**