해결된 질문
작성
·
422
0
안녕하세요 데어님! 강의를 듣다 문득 궁금한 것이 있어서 질문을 올리게됐습니다.
지금 여러가지 OAuth2.0 서비스를 스프링 시큐리티와 연동하는 작업을 진행하고 있는데, 나름대로 예외처리를 하다가 지금 구현하는건 회원가입일까 아니면 로그인일까 라는 생각이 들어서요. 아래 코드는 현재 로직이 회원가입이라고 가정한, PrincipalOauth2UserService 내 리팩토링한 코드입니다.
아래 코드를 따르자면 로그인 링크를 클릭했을 때 DB 내에 저장된 username 을 가져와 비교한 뒤 만약 동일한 username 이 있다면 간단하게 예외를 발생하도록 짜보았습니다.
그렇다면 지금 과정은 로그인이 아닌 회원가입이고, 로그인을 위한 로직은 따로 작성해줘야 하는 걸까요 ?
구글 [로그인], 페이스북 [로그인] 이라고 돼있어서 조금 헷갈리네요.. 😅
1. public OAuth2User loadUser() {
... 중략
OAuth2UserInfo oauth2UserInfo = null;
if (oauth2UserInfo != null) {
String provider = oauth2UserInfo.getProvider();
String providerId = oauth2UserInfo.getProviderId();
String username = provider + "_" + providerId;
User findUser = userRepository.findByUsername(username);
if (findUser == null) {
user = saveUserInfo(oauth2UserInfo, provider, providerId, username);
userRepository.save(user);
} else {
try {
throw new Exception("이미 존재하는 유저입니다.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
return new PrincipalDetails(user, oAuth2User.getAttributes());
}
2. saveUserInfo()
private User saveUserInfo(OAuth2UserInfo oauth2UserInfo, String provider, String providerId, String username) {
String email = oauth2UserInfo.getEmail();
String password = bCryptPasswordEncoder.encode("password"); // 별 의미없는 패스워드
String role = "ROLE_USER";
return User.builder()
.username(username)
.password(password)
.email(email)
.role(role)
.provider(provider)
.providerId(providerId)
.build();
}
}