오늘의 포스트는 라라벨 포스트 중에서 역대급으로 짧은 포스트가 될지도 모르겠다.
왜냐하면 코드에 대해서 설명할 것이 없기 때문이다.
이번 포스트는 설정한 횟수만큼 연속 로그인 실패 시 설정한 시간만큼 로그인을 제한하는 기능을 구현하려고 한다.
그런데 구현이라고 할 것도 없다.
이미 만들어져 있는 코드에 숫자만 집어넣으면 된다.
이전 포스트
라라벨 브리즈, 프로필 수정 페이지에 nickname 항목 추가
설정한 횟수만큼 연속 로그인 실패 시 설정한 시간만큼 로그인 제한하기 · 4th-avenue/laravel13-livewire@c653ea3 · GitHub
전체적인 코드 수정은 이 깃허브 링크를 통해서 확인할 수 있다.
app/Livewire/Forms/LoginForm.php 파일 수정
public function authenticate(): void
{
$this->ensureIsNotRateLimited();
if (! Auth::attempt($this->only(['userid', 'password']), $this->remember)) {
RateLimiter::hit($this->throttleKey(), 300); // 이 부분에 '300'을 추가함
throw ValidationException::withMessages([
'form.userid' => trans('auth.failed'),
]);
}
RateLimiter::clear($this->throttleKey());
}
주석으로 표시한 부분에 300이라는 숫자를 추가했다.
이건 설정한 횟수만큼 연속 로그인 실패 시 300초(5분) 동안 로그인 시도를 할 수 없도록 설정한 것이다.
protected function ensureIsNotRateLimited(): void
{
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 3)) { // '5'를 '3'으로 수정
return;
}
event(new Lockout(request()));
$seconds = RateLimiter::availableIn($this->throttleKey());
throw ValidationException::withMessages([
'form.userid' => trans('auth.throttle', [
'seconds' => $seconds,
'minutes' => ceil($seconds / 60),
]),
]);
}
주석으로 표시한 것처럼 원래 5였던 값을 3으로 바꿨다.
이것으로 최종적으로 3번 연속 로그인에 실패 시 300초(5분) 동안 로그인 시도를 할 수 없게 된다.
사실 적절한 횟수는 5번이 맞는 것 같다.
로그인 시도 횟수 설정은 여기서 하는 것이라는 걸 보여주기 위해서 일부러 수정해 본 거다.
로그인 시 아이디 혹은 비밀번호가 틀리면 이런 메시지가 나온다.
그리고 설정한 횟수만큼 틀리면 이런 메시지가 나온다.
이것으로 설정한 횟수만큼 연속 로그인 실패 시 설정한 시간만큼 로그인을 제한하는 것은 성공했다.
그런데 영어를 그대로 한국어로 번역한 것 같은 에러 메시지가 거슬린다.
에러 메시지까지 수정하고 글을 끝마치겠다.
lang/ko/auth.php 파일 수정
return [
'failed' => '아이디 혹은 비밀번호가 틀렸습니다.',
'password' => '비밀번호가 잘못되었습니다.',
'throttle' => '너무 많은 로그인을 시도했습니다. :seconds초 후에 다시 시도하세요.',
];
여기는 딱히 설명할 것도 없다.
기존의 "제출된 인증 정보가 레코드와 일치하지 않습니다"라는 직관적이지 못했던 번역투 문장을 "아이디 혹은 비밀번호가 틀렸습니다."로 누구나 이해하기 쉽게 바꾸고, 차단 시 안내 메시지도 깔끔하게 다듬었다.
이제 사용자가 비밀번호를 틀리더라도 훨씬 명확하고 자연스러운 메시지가 나올 것이다.
다음 포스트

0 Comments
댓글 쓰기
🔸 댓글은 블로그 운영자의 승인 후에 블로그에 표시됩니다.
🔸 비로그인 방문자 분께서는 '익명'보다 이름/URL로 댓글을 남겨주시면 감사하겠습니다. (URL은 생략 가능합니다.)
🔸 구글 로그인 방문자는 '알림 사용'에 체크를 하시면, 남겨주신 댓글에 대한 답글 알림을 메일로 받아볼 수 있습니다. 📩