백기선 강사님의 '스프링과 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문구도 뜬다!
그리고 알맞게 비밀번호를 입력해서 수정하고, 다시 재로그인해서 로그인이 된다면
이번 포스팅에서 구현한 비밀번호 수정하기 완료!
'💖 Java > Spring Data JPA' 카테고리의 다른 글
[ StudyOlle ] ModelMapper 적용하기 (0) | 2022.03.15 |
---|---|
[ StudyOlle ] 알림 설정 변경 (0) | 2022.03.14 |
[ StudyOlle ] 프로필 수정(4) - 프로필 이미지 변경 (0) | 2022.03.13 |
[ StudyOlle ] 프로필 수정(3) - 테스트 (0) | 2022.03.11 |
[ StudyOlle ] 프로필 수정(2) - 수정 처리 & 메세지 (0) | 2022.03.11 |