본문 바로가기

💖 Java/Spring Data JPA

[ StudyOlle ] 패스워드 수정

728x90

 

 

 

 

백기선 강사님의 '스프링과 JPA 기반 웹 애플리케이션 개발' 강의를 수강 후 공부하며 작성한 포스팅입니다.

 

 

 

 

🎈 목표

프로필 수정 페이지에서 패스워드 탭으로 이동 -> 패스워드 변경 프로세스를 구현하고, 테스트까지 완료해보자!

 

 

👽 패스워드 수정하기

- PasswordForm

✔ 패스워드 수정 페이지에서 응답받을 form 객체를 만들어준다

 

 

 

 

- PasswordFormValidator

패스워드 검증을 확인하기 위해서 validator를 만들어 보자!

(물론 꼭 패스워드 validator를 만들지 않아도 된다. 직접 비교해도 됨)

 

supports() : 어떤 타입의 form 객체를 validate 할 건지, 지금 들어온 객체가 할당 가능한 객체인지 확인

validate() : 입력한 새 비밀번호와 확인용 다시 입력한 새 비밀번호가 일치하지 않으면 error를 담아 보낸다

 

이 validator는 다른 데서 사용되지 않을 것 같기 때문에 Bean에 등록해주지 않고, 패스워드 수정할 때 new를 통해 사용해줄 예정!

 

 

 

 

- SettingsController

위에서 만든 PasswordForm과 Validator를 Controller에 적용시켜보자!

 

1. validator 등록

@InitBinder를 사용해 위에서 만든 validator를 Controller에 추가해준다

 

 

 

 

2. password 변경 페이지 접속 핸들러

model에 인증된 유저 정보와 passwordForm을 담아서 view로 보내준다

 

 

 

 

3. password 변경 적용 핸들러

✔ 패스워드 변경 페이지에서 '변경하기' 버튼을 눌렀을 때 Form이 제출되는 PostMapping도 이어서 작성해보자

 

 

👀 파라미터

현재 유저의 password를 update 하는 것이기 때문에 현재 유저의 정보가 필요함(@CurrentAccount)

✔ validation을 하고 binding 받을 ModelAttribute인 passwordForm

validation 할 때 생성된 error를 binding 받을 수 있는 errors

만약 error가 존재한다면, 다시 error를 담아 view로 보내줘야 하기 때문에 model이 필요

✔ 변경이 완료됐을 때 보내줄 message를 담은 RedirectAttribute

 

 

데이터를 변경해주는 일은 transaction이 있는 service에서 진행해줘야 하기 때문에

update코드를 accountService에서 진행하도록 해준다.

 

 

 

 

 

- AccountService

변경된 password는 반드시 passwordEncoder를 통해 encoding해준 상태로 DB에 저장되어야 한다

account는 detached 상태이기 때문에 save를 통해 merge 해준다.

 

 

 

 

- settings/password.html

패스워드 변경도 form으로 이뤄지기 때문에 fragments.html에 있는 form-validation을 가져와서 넣어준다

 

 

 

 

 

 

👽 패스워드 수정 테스트

패스워드 폼 확인, 패스워드 정사 값 입력, 패스워드 값 에러 이렇게 하나씩 테스트를 진행해준다

( 앞서서 진행했던 프로필 수정 테스트와 매우 비슷 )

 

* 꼭 @WithUserDetails 어노테이션을 사용해 인증된 유저 정보를 입력해줘야 함!

 

 

 

 

 

 

 

🎁 정리

프로필 수정에서 패스워드 변경 탭이 잘 활성화 & 열리고,

패스워드를 validation에 걸리게 3자보다 적게 입력하면 error문구도 뜬다!

 

그리고 알맞게 비밀번호를 입력해서 수정하고, 다시 재로그인해서 로그인이 된다면

이번 포스팅에서 구현한 비밀번호 수정하기 완료!

 

 

 

728x90