5.11. 팀프로젝트 진행상황
헷갈렸던 부분
정보 수정을 하고 나서 ${#authentication.principal.useremail}와 같은 정보를 보여준다.
이는 db와 연결된 member가 아닌 MembersecurityDTO와 연결된 객체들이다. 따라서 member에 해당하는 내용을 쿼리문을 작성하여 수정하여도 MembersecurityDTO가 업데이트 되지 않아서 수정된 값이 보이지 않는 문제가 있었다.
물론 ${#authentication.principal.useremail}가 아닌 member.getUseremail 등의 방법으로 정보를 보이는 방법도 있을 수 있다. 그러나 다른 부분에서 업데이트 된 정보가 필요할 수 있기 때문에 MembersecurityDTO를 업데이트 해줄 필요성이 있었다.
// memberSecurityDTO 업데이트
MemberSecurityDTO memberSecurityDTO = (MemberSecurityDTO) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
memberSecurityDTO.setUsernickname(usernickname);
memberSecurityDTO.setUseremail(useremail);
memberSecurityDTO.setUseraddr(useraddr);
memberSecurityDTO.setUserfullname(userfullname);
memberSecurityDTO.setUserphone(userphone);
log.info("여기5");
// Authentication 객체 업데이트
Authentication newAuthentication = new UsernamePasswordAuthenticationToken(memberSecurityDTO, memberSecurityDTO.getPassword(), memberSecurityDTO.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(newAuthentication);
따라서 이처럼 memberserviceImpl에서 설정하고 업데이트를 해주었다.
일반 회원가입을 할 때는 기본적으로 닉네임을 설정하는 창이 있다. 소셜 로그인의 경우 사용자 이메일(아이디)을 일단 기본값으로 갖고 시작한다. 비밀번호를 설정할 때 닉네임도 같이 설정하도록 한다.
이때 문제가 있었던 부분이 닉네임이 중복되는 것을 막기위해 전체 데이터중 닉네임이 중복되면 exception을 주었었다. 그랬더니 닉네임을 바꾸지 않고(원래 닉네임 그대로 적고) 저장을 누르면 오류가 생겨서
String usernickname =memberMofifyDTO.getUsernickname();
else if (!oldusernickname.equals(usernickname) && memberRepository.findByUserNickName(usernickname).isPresent()) {
throw new UserNickNameExistException();
}
memberRepository.updateusernickname(usernickname,mid);}
if (!oldusernickname.equals(usernickname)) { // 닉네임이 수정된 경우에만 업데이트
String oldusernickname = member.getUsernickname();
이렇게 닉네임이 수정된 경우에만 바뀌도록 수정하였다.
-전체적인 마무리 및 정리
-내가쓴 게시물 등