유저 프로필을 수정할 경우 본인 확인을 위해 먼저 현재 비밀번호를 입력받아서 체크하도록 구현했다.
그리고 정보를 수정한다. 이 때 동일한 비밀번호로는 수정할 수 없도록 제한하기 위해 코드를 짜던 중 문제가 발생했다.
RequestDTO에 새로운 비밀번호를 입력할 수 있는데 필드가 존재해야 하는데 'password' 한 필드에서 동시에 처리하려고 하니 문제가 발생한 것 같다.
현재 회원가입 로그인 등 UserRequestDto를 사용하는 곳이 여러 군데 있어서 기존 Dto에 newPassword 필드를 추가하면 수정해야될 부분이 너무 많았다. 하여 새롭게 UserUpdateRequestDto를 만들어 주었고 새로운 비밀번호를 입력할 수 있도록 필드를 추가해주었다.
정상적으로 API가 실행된 모습이다.
위에 작성했던 1번 문제를 해결하고 나니 또 다른 이슈가 곧 바로 발생했다.. ㅠ
1번 결과 확인 사진을 보면 정상적으로 프로필이 수정되었지만 바로 이어서 바뀐 비밀번호 'Pororo!4321'을 입력하고 다시 프로필을 변경하려고 하자 권한이 없다 (로그인 정보가 일치하지 않음)는 예외가 발생했다.
수정할 값으로 User 객체를 초기화 해주고 다시 DB에 저장하는 코드도 작성되어 있는데, 어디에서 문제가 터진건지 알기 어려워 디버그를 돌려보았다.
로그인된 세션에서 유저 정보를 가져와 값을 비교하도록 로직을 만들었는데, 이메일을 수정할 경우 바뀐 이메일은 DB에 저장되어 제대로 불러오지만 로그인 되어있는 세션의 정보는 이전 정보를 그대로 들고있어서 권한 오류가 발생함을 알게되었다.
만약에 이메일을 수정할 경우 세션을 갱신하도록 로직을 추가했다.
정상적으로 동작한다 !