OAuth2 서비스 패키지에 조회된 회원 정보가 없는 경우 정보를 추가하는 부분에서 이메일을 추가해주면 된다.
// 조회된 회원 정보가 없는 경우 새로운 회원으로 등록
if (findMember == null) {
member = Member.builder()
.loginId(loginId)
.name(name)
//이메일 추가
.email(email)
.provider(provider)
.providerId(providerId)
.role(MemberRole.USER)
.build();
memberRepository.save(member);
} else{
member = findMember;
}
사용자 정보를 제공하는 OAuth2 공급자에서 사용자의 이메일을 반환하는 메서드도 추가해주면 된다.
String email = oAuth2UserInfo.getEmail();
해결완!
[!Caution]
2. 나중에 게시판을 구현할 때 멤버들을 구분하기 위해서 이메일이 필요할 것 같아 DB에 이메일을 추가했다.
근데 오류가 생겼다... 프론트 코드에 이메일 데이터가 뜨지 않는다..
-> 일단 이메일 데이터를 네이버 측에 받아서 이미 DB에 잘 저장한 상태이므로 데이터베이스 문제는 아니다.
고로 컨트롤러 문제일 확률이 높음!
💡 해결
알고보니 해당 변수가 thymelef 컨텍스트에 정의되어 있지 않았다.
그러므로 해당 변수를 컨트롤러에 모델로 추가해주면 된다.
// 로그인한 사용자 정보를 가져옴
Member loginMember = memberService.getLoginMemberByLoginId(loginId);
// 로그인한 사용자가 있으면 모델에 이름을 추가함
if (loginMember != null) {
model.addAttribute("name", loginMember.getName());
model.addAttribute("email", loginMember.getEmail());
}
// home.html 템플릿을 반환 (임시)
return "home";
}
→ 사용자의 이메일 정보를 모델에 추가하면 된다. 소셜 로그인 성공 시 사용자의 이메일 정보가 이미 존재한다고 가정하고, 해당 이메일 정보를 모델에 추가하면 된다.
😵💫 트러블 슈팅 해결 😵💫
💡 해결
해결완!
-> 일단 이메일 데이터를 네이버 측에 받아서 이미 DB에 잘 저장한 상태이므로 데이터베이스 문제는 아니다.
고로 컨트롤러 문제일 확률이 높음!
💡 해결
→ 사용자의 이메일 정보를 모델에 추가하면 된다. 소셜 로그인 성공 시 사용자의 이메일 정보가 이미 존재한다고 가정하고, 해당 이메일 정보를 모델에 추가하면 된다.
해결완!