formLogin() 과 oauth2Login() 를 같이 사용 못하나요?

미해결질문
조호형 프로필

로그인 페이지를, 기본 폼 로그인이 가능한 상태에서 oauth2 로그인(페이스북, 구글로그인 등)도 같이 되도록 구성하고 싶은데,  configure에 formLogin() 과 oauth2Login() 을 동시에 설정을 못하네요?

질문을 이렇게 드려도 되는진 모르겠는데, 스프링 시큐리티를 이용하면서 아이디/패스워드 로그인과 소셜로그인도 가능하게 하려면 어떻게 해야 하나요?

백기선 프로필
백기선 4달 전

좋은 질문이지만 그 질문에 답을 하려면 강좌를 만들어서 보여드려야 하는 수준의 질문이네요. (준비중입니다.)

지금 드릴 수 있는 답변은 폼로그인과 OAuth2 로그인을 동시에 설정할 수 있습니다. 정도겠네요.

http.formLogin()
.loginPage("/login").permitAll()
.and()
.oauth2Login();

다음에 좀 더 준비해서 시큐리티 후속 강좌로 OAuth2를 다루겠습니다.

조호형 프로필
조호형 4달 전

답변감사합니다. 후속강좌 기대하겠습니다.

추가로 질문 드립니다.

제가 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())

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스