이번주 간편 로그인을 구현하는데에 로그인한 유저의 정보와 유저가 체크한 약관 동의를 저장하는 데에 애를 먹었다. 그에 따른 문제 해결 과정을 적을 예정이다.
간편 로그인 처리 과정을 나열하자면 이렇다.
내가 고전한 문제는 4번이었다.
기본적인 소셜 로그인 과정은 이러하다.
하지만 우리 서비스에는 기본적인 소셜 로그인에서 제공하는 이용약관 외에 선택 동의 여부를 묻는 이용약관이 따로 있다. 그래서 별도의 이용약관 조회가 필요하다.
소셜 로그인의 이용약관 체크는 로그인시 유저의 정보와 같이 넘어오지 않고, 동의 여부를 확인하는 API로 로그인시 받은 AccessToken을 헤더에 담아 보내주어야 동의 여부 값을 받아올 수 있다.
여기서 문제는 내 얄팍한 지식으로는 유저의 소셜 정보와 동의 여부 정보를 두번의 API 조회를 할 수 없었다.
AccessToken
을 request
헤더에 담아 리다이렉트를 동의 여부 API로 호출AccessToken
과 함께 프론트에 전달 후 프론트에서 이용약관 API 호출 후 값 저장CORS
오류로 실패RestTemplate
사용으로 우리 서비스에 리다이렉트 전에 이용약관 동의 호출 후 저장
- Spring에서 지원하는 객체로 간편하게 Rest 방식 API 방식 API를 호출할 수 있는 Spring 내장 클래스
- Spring 3.0부터 지원, json, xml 응답 모두 가능
- Rest API 서비스를 요청 후 응답 받을 수 있도록 설계
RestTemplate
의 메서드를 호출RestTemplate
은 MessageConverter
를 이용해 Java object
를 request body
에 담을 message(JSON etc.)
로 변환 (메시지 형태는 상황에 따라 다름)ClientHttpRequestFactory
에서 ClientHttpRequest
를 받아와 요청을 전달ClientHttpRequestFactory
가 HTTP 통신으로 요청을 수행RestTemplate
이 에러 핸들링ClientHttpResponse
에서 응답 데이터를 가져와 오류가 있으면 처리MessageConverter
를 이용해 response body
의 message를 java object
로 변환HttpComponentsClientHttpRequestFactory
객체를 생성RestTemplate
객체를 생성HttpHeader
클래스를 생성한 후 HttpEntity
객체 삽입exchange()
메소드로 api를 호출HashMap
에 추가이와 비슷해 보였던 상황
JWT
Refresth
토큰을 통한AccessToken
재발급 과정을 API 호출을 다시 못해 프론트에 도움을 받았었는데RestTemplate
를 사용하면 프론트의 도움 없이AccessToken
을 발급할 수 있을 것 같아 구현해보려고 한다.
아는게 힘이라는 생각이 또 드는 한주였다.