회원가입? 로그인 ?
안녕하세요 데어님! 강의를 듣다 문득 궁금한 것이 있어서 질문을 올리게됐습니다.
지금 여러가지 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();
}
}
답변 2
1
리팩토링 필요합니다.
최대한 메서드를 하나의 책임을 가지게 나누어서 조합해서 사용하는 것이 좋습니다.
그리고 로그인 요청을 했을때, 만약에 회원가입이 안되어있다면, 자동 회원가입 메서드를 호출해주고
회원가입이 되어있다면 바로 로그인할 수 있게 분기만 해주면 됩니다.
즉, 런타임시 동적으로 회원가입 혹은 로그인이 결정됩니다.
JWT를 구현한 다음 이 API를 호출해서 사용하는 것은 프론트엔드 쪽에서 하는 역할인가요?
0
98
1
Jwt쓰면 스프링시큐리티는 필수적으로 사용해야하나요?
0
402
1
13:23 system.out 출력문이 다르게 나옵니다.
0
132
1
수료증 문의
0
230
2
9분대에 질문이 있습니다 !
0
117
1
password 비교를 하지 않았는데 어떻게 인증이 통과된 건가요?
0
322
1
이전 강의 참고하라는 말씀
0
253
1
강의 실습하다가 막히는 분들 참고(2024년8월 기준)
2
1118
2
구글 소셜 로그인 302
0
202
1
오류 문의 _ org.springframework.orm.jpa.JpaSystemException: could not deserialize
1
586
1
[자바] 시큐리티 Config 참고
13
954
1
이론강의
0
282
1
SpringSecurity JWT 로그인 URL 2개 설정하는 방법
0
490
1
2024.06기준) 최근 SecurityConfig 설정 문의
0
922
3
구글 로그인시 authentication이 null 값이라고 에러가 발생합니다.
0
681
2
특정 url필터 거는 방법 이슈
0
423
1
강사님께서 말씀하시는 시큐리티세션이 SecurityContext인가요?
0
280
1
25강 마지막 테스트에서 오류
1
1044
2
jwt를 저장하는 위치에 궁금한 점이 있습니다.
0
299
1
mustache를 사용하지 않고 thymeleaf를 사용하려고 하는데
0
700
1
세션 인증방식이 REST 원칙에 위배되는 건가요?
0
343
1
jwt와 실제데이터의 관계
1
248
1
jwt 와 세션ID의 관계
1
314
1
SecurityConfig에서 세션 설정, 인가 설정
0
424
1





