<h1>마이페이지</h1>
<p id="useruid">사용자 UID: </p>
<p id="useremail">이메일: </p>
<script>
// 사용자 정보
document.getElementById("useruid").innerText = `사용자 ID: ${data.uid}`;
document.getElementById("useremail").innerText = `이메일: ${data.email}`;
</script>
부분을 할때
PrincipalDetails userDetails = (PrincipalDetails) authentication.getPrincipal();
System.out.println("📌 인증된 사용자 UID: " + userDetails.getUsername()); // 확인용
response.put("uid", userDetails.getUsername());
response.put("email", userDetails.getUserDto().getEmail());
getUserDto().getEmail()) 부분에서 사용자를 찾을 수 없다는 메시지가 나와서 확인해보니,PrincipalDetails 부분에서
‼️ userDto을 초기화를 제대로 하지않아서 발생한 오류였음.
@RequiredArgsConstructor는 모든 final 필드를 매개변수로 받는 생성자를 자동 생성해 줘.
문제는 userDto는 UserDto.fromEntity(user); 를 통해 변환해야 하는데, 자동 생성된 생성자는 이를 처리하지 못함! ❌
@RequiredArgsConstructor
public class PrincipalDetails implements UserDetails {
private final User user; // User 엔티티를 직접 사용
private final UserDto userDto; // ❌ @RequiredArgsConstructor로 해결되지 않음
}
public PrincipalDetails(User user) { //직접 생성자 작성
this.user=user;
this.userDto=UserDto.fromEntity(user); // UserDto를 변환해서 초기화
}
}
이렇게 생성하고 다시 확인하면 제대로
userDetails.getUserDto().getEmail()); 제대로 출력됨!