Search

수정된 암호를 새로 저장할 때 일어나는 오류

태그

Description

@Override @Transactional public Boolean registerModifiedPassword(ModifiedPassword modifiedPassword) { Long memberId = modifiedPassword.getId(); Optional<Member> maybeMember = memberRepository.findById(memberId); Optional<Authentication> maybeauthentication = authenticationRepository.findById(memberId); if(maybeMember.isEmpty() && maybeauthentication.isEmpty()) { return false; } else { final Member member = maybeMember.get(); memberRepository.save(member); final BasicAuthentication authentication = new BasicAuthentication( member, Authentication.BASIC_AUTH, modifiedPassword.getPassword() ); authenticationRepository.save(authentication); } return true; }
Java
복사
이런식으로 쓰면 Authentication이 Member와 OneToMany 관계라서 비밀번호가 두 개 생기고 두 비밀번호 모두 가입이 가능한 상태가 됩니다. 왜 OneToMany인지 예전에 찾아봤던 기억이 있는데 회원가입을 저희가 만든 코드로 하면 Basic으로 들어가고 특정 사이트 (구글, 카카오)로 가입을 하면 Google, KaKao로 등록할 예정이여서 이렇게 하셨다고 합니다.
@Override @Transactional public Boolean registerModifiedPassword(ModifiedPassword modifiedPassword) { Long memberId = modifiedPassword.getId(); // Optional<Member> maybeMember = memberRepository.findById(memberId); Optional<Authentication> maybeauthentication = authenticationRepository.findById(memberId); // if(maybeMember.isEmpty() || maybeauthentication.isEmpty()) { if(maybeauthentication.isEmpty()) { return false; } else { // final Member member = maybeMember.get(); final BasicAuthentication authentication = (BasicAuthentication) maybeauthentication.get(); String encryptedPassword = new PasswordHashConverter().convertToDatabaseColumn(modifiedPassword.getPassword()); authentication.setPassword(encryptedPassword); authenticationRepository.save(authentication); } return true; }
Java
복사
그래서 이런식으로 해당 Authentication을 가져오고 사용자로부터 받아온 패스워드를 암호화 처리해서 해당 Authentication 라인에다가 대체를 하면 새로운 비밀번호가 저장이 되는게 아니라 비밀번호가 교체가 되는데 이전에 설정했던 비밀번호와 새롭게 설정한 비밀번호 모두 로그인이 안 되는 기현상이 발생합니다. MySQL에서 직접 해당 컬럼을 찾아보면 같은 암호화 유형으로 저장이 된 걸 확인했는데 복호화가 제대로 안 되는것 같습니다.
이상으로 기억을 더듬어서 작성한 자료입니더.

Try

Solution

이 부분은 DRAFT PR이 필요할 것 같습니다.
또한 Member Entity와 Authentication Entity 구성이
어떻게 되어 있는지 여부에 따라서도 결과가 서로 많이 달라질 것 같습니다.
이슈 습관화
DRAFT PR(코드 작업이 큼)
→ DRAFT PR 경로 올리세요.