-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
formLogin() 과 oauth2Login() 를 같이 사용 못하나요?
20.04.29 16:02 작성 조회수 646
0
로그인 페이지를, 기본 폼 로그인이 가능한 상태에서 oauth2 로그인(페이스북, 구글로그인 등)도 같이 되도록 구성하고 싶은데, configure에 formLogin() 과 oauth2Login() 을 동시에 설정을 못하네요?
질문을 이렇게 드려도 되는진 모르겠는데, 스프링 시큐리티를 이용하면서 아이디/패스워드 로그인과 소셜로그인도 가능하게 하려면 어떻게 해야 하나요?
답변을 작성해보세요.
4
백기선
지식공유자2020.04.29
좋은 질문이지만 그 질문에 답을 하려면 강좌를 만들어서 보여드려야 하는 수준의 질문이네요. (준비중입니다.)
지금 드릴 수 있는 답변은 폼로그인과 OAuth2 로그인을 동시에 설정할 수 있습니다. 정도겠네요.
http.formLogin()
.loginPage("/login").permitAll()
.and()
.oauth2Login();
다음에 좀 더 준비해서 시큐리티 후속 강좌로 OAuth2를 다루겠습니다.
0
플레어
질문자2020.05.04
답변감사합니다. 후속강좌 기대하겠습니다.
추가로 질문 드립니다.
제가 oauth2로 로그인하는 부분 샘플 찾아서 적용해봤는데요. 일단 인증은 됩니다. 인증 되는 시점에 데이터베이스에서 기 등록된 이메일인지 확인하고자 아래와 같이 memberRepository 를 주입받아서 사용하려고 하는데 주입이 안됩니다.
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
@Autowired
private MemberRepository memberRepository; // <-- 디버그로 실행하면 이부분이 null 로 확인이 됩니다.
....
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
...
Member member = memberRepository.findByEmail(email);
...
}
최초 oauth2 로그인 처리 시 기존 가입자인지 체크하기 위해서 memberRepository 사용하려고 하는데 저 객체가 null 로 되어서 NullPointException 이 발생합니다. 왜 그런걸까요?? ㅠㅠ
아래 컨피그에서 oauth2Login() 부분에서 로그인 처리를 하고 호출하는 방식입니다.
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "/oauth2/**", "/login/**", "/signup", "/css/**", "/images/**", "/js/**", "/console/**", "/favicon.ico/**")
.permitAll()
.anyRequest().authenticated()
.and()
.oauth2Login()
.userInfoEndpoint().userService(new CustomOAuth2UserService())
답변 2