[Spring boot] security + Oauth2로 구글 로그인 구현하기
지난 구글 로그인 구현 포스팅에 이어 로그인한 유저를 반환하는 util를 작성해보려고 합니다.
✏️ OAuthLoginMemberUtiil 생성
@Component
@RequiredArgsConstructor
@Slf4j
public class OAuthLoginMemberUtil {
private final MemberRepository memberRepository;
public Member getGoogleLoginMember() {
OAuth2AuthenticationToken authentication = (OAuth2AuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
String email = authentication.getPrincipal().getAttributes().get("email").toString();
return memberRepository.findByEmail(email).orElseThrow(() -> new RestApiException(ErrorCode.NO_LOGIN_USER));
}
}
OAuth 로그인 회원 정보를 가져오는 util class를 작성해보았습니다.
getGoogleLoginMember() : 현재 인증된 사용자의 OAuth2AuthenticationToken을 가져와 사용자의 이메일을 추출합니다. 그리고 email을 통해 DB에서 해당 member를 반환하고, member가 존재하지 않는다면 예외를 발생하도록 합니다.
💰 OAuthLoginMemberUtiil 사용법
@RequiredArgsConstructor
@RestController
public class PostController {
private final PostService postService;
private final OAuthLoginMemberUtil oAuthLoginMemberUtil;
@PostMapping("/api/posts")
public BaseResponse<CreatePostResponse> createPost(
@RequestPart @Valid CreatePostRequest createPostRequest,
@RequestPart(value = "file", required = false) List<MultipartFile> files) throws IOException {
Member loginMember = oAuthLoginMemberUtil.getGoogleLoginMember();
return new BaseResponse<>(postService.createPost(loginMember, createPostRequest, files));
}
}
위와 같이 로그인한 유저를 가져올 수 있습니다.
'Server > Spring boot' 카테고리의 다른 글
[트러블 슈팅] 스프링 순환 참조(spring circular reference) 해결하기 (0) | 2023.07.15 |
---|---|
[Spring boot] 이미지를 포함하는 글 작성 API 설계 방식 (1) | 2023.07.09 |
[Spring boot] security + Oauth2로 구글 로그인 구현하기 (1) | 2023.05.01 |
[Spring boot] security + Oauth2로 구글 로그인 구현하기 - OAuth 서비스 등록 (0) | 2023.04.29 |
docker-compose 로 Spring boot + MariaDB 개발 환경 구축하기 (0) | 2023.03.16 |