본문 바로가기

Spring Boot

2. Oauth2 구글 로그인 + 페이스북

Map이라서 key값으로 

 

 

 

서버끄고 패키지 만들기

 

 

Optional<T> 

 

제네릭안에 objectrk 만약에 User면 Optional이 User을 감싸고 있고 

 

get -> user가 null이 아닐때만 써야 함. 아니면 nullPointException....

isPresent() -> 있

orElseGet -> 빈객체면 니가 하나 만들어서 리턴.

orElseThrow -> Exection 던져줌.

isPresent() -> 

 

 

 

-> 함수(화살표함수) : 한번만 쓸 때, 타입 신경안쓰고 만들 수 있다.

 

 

PrincipalOauth2UserService

 

하나의 함수로 하기 힘들어서 다음 함수에 넘겨서 끝냄

 

ClientRegistration에 리다이렉션 받은 정보가 다 있음

여기서 중요한건 registrationId  이걸로 파싱을 함

 

oauth2Login을 하면 해당 서비스를 실행하게 한다.

원래는 new로 생성했었음.

 

그러기 위해서는 해당 클래스에서 필드멤버로 DI를 해놔야함.

 

 

 

OAuth2를 이용해서 연결할 사이트들이 다르다.

구글과 페이스북은 같고

네이버와 카카오는 다르기때문에 interface를 이용하면 똑같은 메소드를 불러서 처리가 가능함.

 

 

 

구글과 페이스북으로 로그인이 가능하게 만듬

 

네이밍 쿼리 findByEmail(String email)

네이티브 쿼리 @Query로 직접 짜는것을 추천함

 

User에 3가지 @ 추가


Optional, 옵셔널, 옵션

Optional 지향해야 한다.
옵셔널로 감싸줘서 바꿔주는애는 JPA이다.

 

사용 방법 3가지

1. get

쓸 수 있는 유일한 방법이 있다.

 

2. orElseGet - 추천

3. orElseThrow 

 

방법 3가지인데 컨트롤+Q로 문서보면 자세히 알게됨

 


Exception

 

여기서 NullPointerException.class와 IllegalArgumentException.class를 캐치해서 

제어 할 수 있음

 


 

 

 

 

README.md에 JPA에 관련된거 사진 있음.

 

 

 

USER에 추가

 


서비스

 

 

 

 

 

userOptional은 절대 null값은 리턴 안됨->옵셔널

 

 

 

빌더 -> username이 중복되지 않게 provider+providerId로 만듬

 

password가 null이라도 상관없는 이유

ID랑 PW가 날라가는데 시큐리티 필터가 낚아채서 토큰을 만드는데 manager한테 넘어간다
auth를 만들어야하는데 detail을 호출하고 username이 있는지만 확인함
시큐리티가 db에 있는지 내부적으로 확인함. 이때 null값이면 암호화되지 않아서 로그인이 안됨.  

 

 

 

로그인 타입을 따로 만들면 PrincipalDetails랑 Oauth2details로 나뉘는데
컨트롤러에서 @AuthenticationPrincipal으로 찾을수 있으나 일반 로그인과 Oauth 로그인을 나눠야하는데

이렇게 2개로 나뉘는 것보다는 같은 타입으로 선언하면

 

컨트롤러에서 하나의 타입으로만 받아도 동적으로 2개를 받을 수 있다.


 

어찌보면 오버로딩 개념..

 


Provider 저장하는 방법 2가지
자바 파일 저장
yml

최종적으로 회원정보를 받을때 구글이나 페이스북은 KEY=VALUE 형태로 준다.
마지막으로 response 될때 최종 KEY값은 'RES'이게 MAP 데이터이다.

네이버 같은 경우는 마지막에 회원 정보를 던져줄때 'response'로 던져줌 + JSON     

 

 

옥타 - 전세계 모든 포털을 하나로 묶음


yml에서 최초! create는 매번 drop하고 만듬, update는 기본에 있는걸 수정함, 개발이 끝나면 none