- [Springboot] 43. OAuth 2.0 (5단계-소셜 로그인 API 연동- 자동 회원가입/로그인 처리)2024년 08월 16일
- Song hyun
- 작성자
- 2024.08.16.:12
728x90반응형[Springboot] 43. OAuth 2.0 (5단계-소셜 로그인 API 연동- 자동 회원가입/로그인 처리)
1. KakaoDevelopers - 자동 로그인 처리
: 우리 서버에 회원가입 시에 패스워드 제약 -> not null (무조건 값이 들어가야 한다.)
(1) 기존 회원 정보 조회를 위한 searchUsername()
/** * username 사용자 존재 여부 조회 * @param String username * @return User / null */ public User searchUsername(String username) { return userRepository.findByUsername(username); }
(2) 자동 회원가입 처리
// 코드 추가 @GetMapping("/logout") public String logout() { session.invalidate(); // 로그아웃 됨 return "redirect:/user/sign-in"; } @GetMapping("/kakao") @ResponseBody // @RestController = @Controller + @ResponseBody public String getMethodName(@RequestParam(name="code") String code) { System.out.println("code : "+code); // POST - 카카오 토큰 요청 받기 // header, body 구성 RestTemplate rt1 = new RestTemplate(); // 헤더 구성 HttpHeaders header1 = new HttpHeaders(); header1.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); // 바디 구성 MultiValueMap<String, String> params1 = new LinkedMultiValueMap<String,String>(); params1.add("grant_type", "authorization_code"); params1.add("client_id", "e6c387d854fa01be9131e377baa4686f"); params1.add("redirect_uri", "http://localhost:8080/user/kakao"); params1.add("code", code); // 헤더+바디 결합 HttpEntity<MultiValueMap<String,String>> reqKakaoMessage = new HttpEntity<>(params1,header1); // 통신 요청 ResponseEntity<OAuthToken> response1= rt1.exchange("https://kauth.kakao.com/oauth/token", HttpMethod.POST, reqKakaoMessage, OAuthToken.class); System.out.println("response : "+response1.getBody().toString()); // 카카오 리소스서버 사용자 정보 가져오기 RestTemplate rt2=new RestTemplate(); // 헤더 HttpHeaders headers2=new HttpHeaders(); // 반드시 Bearer 값 다음에 공백 한 칸 추가할 것 headers2.add("Authorization","Bearer "+response1.getBody().getAccessToken()); headers2.add("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); // 본문(BODY) x // HTTP ENTITY 만들기 HttpEntity<MultiValueMap<String, String>> reqKakaoInfoMessage = new HttpEntity<>(headers2); // 통신 요청 ResponseEntity<KakaoProfile> response2= rt2.exchange("https://kapi.kakao.com/v2/user/me", HttpMethod.POST, reqKakaoInfoMessage, KakaoProfile.class); KakaoProfile kakaoProfile= response2.getBody(); // -----카카오 사용자 정보 응답 완료----- // 최초 사용자라면 자동 회원 가입 처리 (우리 서버) // 회원가입 이력이 있는 사용자라면 바로 세선처리(우리 서버) // 사전기반 --> 소셜 사용자는 비밀번호를 입력하는가? 안 하는가? // 우리 서버에 회원가입시에 --> password --> not null (무조건 만들어 넣어야 함. DB 정책) // 1. 회원가입 데이터 생성 SignUpDTO signUpDTO = SignUpDTO.builder() .username(kakaoProfile.getProperties().getNickname()+"_"+kakaoProfile.getId()) .fullname("OAuth_"+kakaoProfile.getProperties().getNickname()) .password("07f5efbd3004db57fcd53846050461b203e984faa9d957285aa26f8b") .build(); // 2. 우리 사이트 최초 소셜 사용자인지 판별 User oldUser=userService.searchUsername(signUpDTO.getUsername()); if(oldUser == null) { // 사용자가 최초 소셜 로그인 사용자임! userService.createUser(signUpDTO); // 고민 !!! } return response2.getBody().toString(); }
2. 카카오 프로필과 연동 - 이미지 받아오기
public String setUpUserImage() { if(uploadFileName==null && originFileName==null) { uploadFileName="https://picsum.photos/id/1/350"; } else if(fullname.contains("OAuth")) { uploadFileName=this.getOriginFileName(); } else { uploadFileName = "/images/uploads/" +uploadFileName; } return uploadFileName; }
728x90반응형'Springboot' 카테고리의 다른 글
[Springboot] 44. 익명 게시판 만들기 (0) 2024.08.19 [Springboot] 42. OAuth 2.0 (4단계-Kakao Developers 소셜 로그인 사용자 정보 받아오기) (0) 2024.08.16 [Springboot] 41. OAuth 2.0 (3단계-Kakao Developers 소셜 로그인 API 토큰 받기) (0) 2024.08.16 [Springboot] 40. OAuth 2.0 (2단계-Kakao Developers API 응답 코드 받기) (0) 2024.08.14 [Springboot] 39. OAuth 2.0 (1단계-Kakao Developers 사용하기) (0) 2024.08.14 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)