• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

패스워드 수정 시 '현재 패스워드'를 추가로 인증시키는 방법에 대한 질문입니다.

22.07.16 18:05 작성 조회수 1.18k

1

안녕하세요. '패스워드 수정' 강의와 해당 강의에 등록된 질문(https://www.inflearn.com/questions/302863)을 통해 회원의 패스워드 수정 시 '현재 패스워드'를 추가로 인증시키도록 코드를 변경하던 중 옳바른 개발 방법(?)에 대해 질문드립니다.

 

우선 패스워드 변경 View에서 '현재 패스워드'를 입력할 수 있도록 'input[type="password"]' 태그를 추가하고, PasswordForm(DTO 역할) 클래스에  'oldPassword'라는 프로퍼티를 추가했습니다.

 

이후 제가 하고자 하는 것은 패스워드 변경 유효성 검사를 하기 위해 생성했었던 PasswordFormValidator 클래스에서 

View에서 입력받은 '현재 패스워드 값''DB에 저장된 회원의 현재 패스워드 값'을 비교하여 일치하지 않는다면 Custom한 Error 메시지를 View로 전달해주고 싶은 상황입니다.

 

여기서 고민되는 것은 '패스워드 변경 Form' 요청 핸들러 메소드에서는 현재 인증된 회원 정보를 Model에 담아주고 있기 때문에 View쪽에 'input[type="hidden"]' 태그를 추가한 뒤 회원의 이메일, 닉네임 값을 설정하고

패스워드 변경 요청 시 PasswordForm 클래스에 그 값이 바인딩 될 수 있도록 아래와 같이 이메일, 닉네임 프로퍼티를 추가하여

PasswordFormValidator 클래스에서 DB에 저장된 회원의 현재 패스워드 값을 비교해서 틀린 경우 Error를 생성해 줄 것인가 아니면 이를 Validator가 아닌 '패스워드 변경 비즈니스 로직'에서 할 것인가입니다.

 

만약, 비즈니스 로직에서 현재 비밀번호에 대한 유효성 검증을 진행하는 경우 PasswordForm 클래스에 굳이 필요 없는 email, nickname 프로퍼티를 추가하지 않아도 되는데요. 이 두가지 방법 중 어떤 경우가 좀 더 효율적인지, 제가 생각하지 못한 방법이 또 있는지(비슷한 상황들에 대한 노하우) 조언 부탁드리겠습니다.

 

미리 답변 감사합니다.

 

아래는 PasswordFormValidator을 통해 현재 패스워드 유효성 검사를 진행할 경우에 대한 예시 코드입니다.

답변 1

답변을 작성해보세요.

1

어느 방법을 선택해도 괜찮지만 저라면 패스워드 변경 로직에서 처리할 것 같습니다. 부가적인 필드를 추가해야 한다는 것보다는 패스워드 입력값 검증기에서 "현재 패스워드를 확인하는 로직"까지 들어가는 걸 원치 않아서요. 해당 로직을 어느 곳에 두는 것이 더 어울리는가를 생각해 봤을 때 그런 결정을 할 것 같네요. 좋은 질문 감사합니다. 그리고 답변이 늦어져서 죄송해요~

Henu님의 프로필

Henu

질문자

2022.07.29

조언해 주신데로 현재 회원의 패스워드를 비교하는 코드를 비즈니스 로직으로 옮겨야겠습니다.

이 글과 연관된 '테스트'에 관련된 코드도 다시 한번 살펴봐야겠네요.

답변 감사합니다!