Springboot - Security (9) - 구글 로그인 및 자동 회원가입 진행 완료

Yuri Lee·2020년 9월 18일
0

지금 우리가 PrincipalDetails 를 만든 이유는 ? 두가지 목적이 있다.

시큐리티가 들고 있는 세션 정보는 하나밖에 없다. authentication 객체이다. 이 객체가 담을 수 있는 필드가 가지가 있다. OAuth2User, uerDetails

우리가 회원가입을 하게 되면 User 오브젝트가 필요하다. 근데 OAuth2User, uerDetails 타입은 유저 오브젝트를 포함하고 있지 않는다. 얘들이 세션에 저장 되었는데 내가 세션에 땡겨와도 유저 오브젝트를 찾을 수 없다.

그래서 우리는 prinpalDetails라는 클래스를 하나 만들고 userDetails를 implements 해서 같은 타입으로 묶어서 여기다가 user 오브젝트를 품어놓았다.

그럼 userDetails를 authentication에 넣을 수 있다. 그래서 얘를 prinpalDetails로 체인지 하는 것이다. 이렇게 하면 prinpalDetails는 유저 정보를 갖고 있으니까 내가 세션 정보에 접근을 하면 유저 오브젝트에 접근할 수 있다.

근데 내가 oauth2로 로그인 할때는 OAuth2User 얘가 튀어나오고 userDetails로 로그인할 때는 userDetails가 튀어나옴.

따라서 프로그램이 굉장히 복잡해진다. 그래서 OAuth2User도 prinpalDetails에 집어넣어버리는 것이다. 다 묶어버리는 것!

그럼 나는 꺼내서 사용할 때 어떤 타입만 사용할 수 있을까? prinpalDetails 만 사용하면 되는 것이다!!! 그럼 그 안에 userObject가 있다.

Aㅏ.......... 먼저 로그인을 하고 들어가야지 이 바보야 나는 왜 삽질만 할까ya


{sub=108093779182714031698,
name=yuri lee,
given_name=yuri,
family_name=lee,
picture=https://lh3.googleusercontent.com/-wYB_5cdsgPY/AAAAAAAAAAI/AAAAAAAAACs/AMZuuckiu3V1IB3F_MHAmtcJnp1Ih_hq4w/photo.jpg,
email=ddddd@gmail.com,
email_verified=true,
locale=en}

이 정보를 통해서 유저 오브젝트를 구성할 것이다.


[Reference]

이 글은 유투버 데어 프로그래밍의 스프링 부트 시큐리티 강좌를 바탕으로 정리한 내용입니다.

profile
Step by step goes a long way ✨

0개의 댓글