라라벨, 설정한 횟수만큼 연속 로그인 실패 시 설정한 시간만큼 로그인 제한하기

포스트 썸네일 이미지

오늘의 포스트는 라라벨 포스트 중에서 역대급으로 짧은 포스트가 될지도 모르겠다.

왜냐하면 코드에 대해서 설명할 것이 없기 때문이다.


이번 포스트는 설정한 횟수만큼 연속 로그인 실패 시 설정한 시간만큼 로그인을 제한하는 기능을 구현하려고 한다.

그런데 구현이라고 할 것도 없다.

이미 만들어져 있는 코드에 숫자만 집어넣으면 된다.




이전 포스트




전체적인 코드 수정은 이 깃허브 링크를 통해서 확인할 수 있다.




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번이 맞는 것 같다.

로그인 시도 횟수 설정은 여기서 하는 것이라는 걸 보여주기 위해서 일부러 수정해 본 거다.





로그인에 실패하자 '제출된 인증 정보가 레코드와 일치하지 않습니다.'라는 메시지가 뜬다

로그인 시 아이디 혹은 비밀번호가 틀리면 이런 메시지가 나온다.




설정한 횟수만큼 로그인에 실패하자 '너무 많은 로그인을 시도하였습니다. 300 초 후에 다시 시도하십시오.'라는 메시지가 뜬다

그리고 설정한 횟수만큼 틀리면 이런 메시지가 나온다.




이것으로 설정한 횟수만큼 연속 로그인 실패 시 설정한 시간만큼 로그인을 제한하는 것은 성공했다.

그런데 영어를 그대로 한국어로 번역한 것 같은 에러 메시지가 거슬린다.

에러 메시지까지 수정하고 글을 끝마치겠다.





lang/ko/auth.php 파일 수정


return [
    'failed'   => '아이디 혹은 비밀번호가 틀렸습니다.',
    'password' => '비밀번호가 잘못되었습니다.',
    'throttle' => '너무 많은 로그인을 시도했습니다. :seconds초 후에 다시 시도하세요.',
];

여기는 딱히 설명할 것도 없다.




기존의 "제출된 인증 정보가 레코드와 일치하지 않습니다"라는 직관적이지 못했던 번역투 문장을 "아이디 혹은 비밀번호가 틀렸습니다."로 누구나 이해하기 쉽게 바꾸고, 차단 시 안내 메시지도 깔끔하게 다듬었다.

이제 사용자가 비밀번호를 틀리더라도 훨씬 명확하고 자연스러운 메시지가 나올 것이다.




다음 포스트

이 글이 도움이 됐거나 유익했다면 스크롤을 조금만 더 내려서 댓글을 남겨주세요. (비로그인도 가능합니다!)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊

지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.
이전 포스트 다음 포스트

댓글 쓰기

0 Comments

문의하기 양식