카카오 로그인 API 사용하기 - 4(로그인 완료)

2022. 8. 18. 17:45·STUDY/SPRING
반응형

이전 포스팅 : https://3unbbb.tistory.com/106

 

카카오 로그인 API 사용하기 3

이전 포스팅 : 카카오랑 연결 https://3unbbb.tistory.com/105 카카오 로그인 API 사용하기 -2 이전 포스트에서 카카오 로그인 API를 사용하기 위한 기본 설정 & 전체적인 흐름을 봤다. https://3unbbb.tistory.co..

3unbbb.tistory.com

 

이제 가져온 토큰으로 사용자 정보를 가져와야 함

이렇게 요청하면 >> 이런 정보를 받아올 수 있음

전체정보를 가져올 거니까 GET방식으로 부르기 & 요청 헤더 확인하기(access_token)

앞에 access_token은 받을 때 사용했던 방법이랑 비슷

  (outputStream이아닌 inputStream 사용)

	public void getUserInfo(String access_token) throws IOException {
		
		String Access_token = access_token;
		String url ="https://kapi.kakao.com/v2/user/me";
		
		URL con_url;
		try {
			con_url = new URL(url);
			
			//해당 주소 페이지로 접속 & 단일 http로 접속하기 위해 캐스팅
			HttpURLConnection conn = (HttpURLConnection) con_url.openConnection();
			
			//GET요청
			conn.setRequestMethod("GET");
			//POST or PUT 방식으로 요청을 보내려면 output을 true로 설정해야 함
			//conn.setDoOutput(true);
			
			//요청 헤더를 정의
			conn.setRequestProperty("Authorization", "Bearer "+Access_token);
			
			//InputStream 으로 응답 헤더와 메시지를 읽어들이는 옵션 정의
			//OutputStream 으로 post 데이터를 넘겨주는 옵션 정의
			
			BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			
			String line = "";
			String result = "";
			
	        while ((line = br.readLine()) != null) {
	            result += line;
	        }
	        
	        System.out.println("response body : " + result);
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

여기까지 작성하고 실행하면 아래와 같이 로그인한 계정의 정보가 출력됨

이 정보를 json으로 파싱해서 hashMap에 담아서 컨트롤러로 넘겨주면 된다.

hashMap에 담을 때는 각각 담아야 하므로 JsonObject를 사용

내가 필요한건 property의 nickname과 kakao_account의 email, birthday 임

property와 kakao_account를 파싱

 

데이터가 잘 불러와지면 hashmap에 넣어준 후 컨트롤러로 전달

(전체 코드)

	public HashMap<String, Object> getUserInfo(String access_token) throws IOException {
		
		String Access_token = access_token;
		String url ="https://kapi.kakao.com/v2/user/me";
		
		HashMap<String, Object> userInfo = new HashMap<String, Object>();
		
		URL con_url;
		try {
			con_url = new URL(url);
			
			//해당 주소 페이지로 접속 & 단일 http로 접속하기 위해 캐스팅
			HttpURLConnection conn = (HttpURLConnection) con_url.openConnection();
			
			//GET요청
			conn.setRequestMethod("GET");
			//POST or PUT 방식으로 요청을 보내려면 output을 true로 설정해야 함
			//conn.setDoOutput(true);
			
			//요청 헤더를 정의
			conn.setRequestProperty("Authorization", "Bearer "+Access_token);
			
			//InputStream 으로 응답 헤더와 메시지를 읽어들이는 옵션 정의
			//OutputStream 으로 post 데이터를 넘겨주는 옵션 정의
			
			BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			
			String line = "";
			String result = "";
			
	        while ((line = br.readLine()) != null) {
	            result += line;
	        }
	        
	        System.out.println("response body : " + result);
	        
	      //Json형식의 데이터를 파싱(gson 라이브러리 추가 다운로드하기)
			JsonParser parser = new JsonParser();
			JsonElement element = parser.parse(result);
			
			//properties와 kakao_account 안의 정보를 가져오기위해서 JsonObject로 Json 객체로 바꿔주기
			
			JsonObject properties = element.getAsJsonObject().get("properties").getAsJsonObject();
			JsonObject kakao_account = element.getAsJsonObject().get("kakao_account").getAsJsonObject();
			
			String nickname = properties.getAsJsonObject().get("nickname").getAsString();
			String birthday = kakao_account.getAsJsonObject().get("birthday").getAsString();
			String email = kakao_account.getAsJsonObject().get("email").getAsString();
			
			System.out.println("nickname : "+nickname);
			System.out.println("birthday : "+birthday);
			System.out.println("email : "+email);
			
			userInfo.put("nickname", nickname);
			userInfo.put("birthday", birthday);
			userInfo.put("email", email);
			
			br.close();
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return userInfo;
		
	}

 

컨트롤러 에서 뷰로 데이터 전달하기

(전체코드)

	@RequestMapping(value="/oauth", method=RequestMethod.GET)
	public String kakaologin(@RequestParam(value="code", required=false) String code, Model model ) throws IOException {
		
		log.info("code : "+code);
		
		String access_token = service.getAccessToken(code);
		log.info(access_token);
		
		
		model.addAttribute("userInfo",service.getUserInfo(access_token));
		
		return "/main";
	
	}

main.jsp

<html>
<head>
	<title>Main</title>
	<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
</head>
<body>

<div>

<h2> accessToken</h2>

<input type="text" value="${userInfo.nickname }">
<input type="text" value="${userInfo.birthday }">
<input type="text" value="${userInfo.email }">

</div>

</body>
 <script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
 
<script type="text/javascript">
	
</script>

</html>

 

>>>> 결과 

nickname은 한글이라서 인코딩 문제인 듯..

다른 결과값은 잘 들고 와진다.

이제 이 정보로 회원가입 or 로그인 처리하면 될 듯.

 

 

 

이전 포스트와 마찬가지로 https://antdev.tistory.com/37?category=807235 포스트를 참고하였습니다.

 

[Kakao Login API] 카카오 계정의 유저 정보 받아오기 및 마무리 (Spring Boot 환경에서 카카오 로그인 API

2019/03/22 - [OAuth/Kakao Login API] - [Kakao Login API] 카카오 로그인 API 서비스 구현 (Spring Boot 환경에서 카카오 로그인 API RESTful방식으로 연동하기 -3장) 2019/03/22 - [OAuth/Kakao Login API] - [..

antdev.tistory.com

HttpURIConnection 은 https://ibabo.tistory.com/266 블로그를  참고했습니다.

 

HttpURLConnection클래스로 웹페이지 POST 요청하기

http://blog.naver.com/musalhk/150082514641 [출처] HttpURLConnectio클래스로 웹페이지 POST 요청하기|작성자 무살해커 // 요청할 파라미터의 정보를 입력한다. String body = "id=asdf&pass=asdf"; // URL클래..

ibabo.tistory.com

반응형
저작자표시 (새창열림)

'STUDY > SPRING' 카테고리의 다른 글

Spring Boot 기본 구조  (0) 2023.07.06
의존성 주입(DI)  (0) 2022.10.28
카카오 로그인 API 사용하기 - 3  (0) 2022.08.18
카카오 로그인 API 사용하기 -2  (1) 2022.08.16
카카오 로그인 api 사용하기 -1  (0) 2022.08.13
'STUDY/SPRING' 카테고리의 다른 글
  • Spring Boot 기본 구조
  • 의존성 주입(DI)
  • 카카오 로그인 API 사용하기 - 3
  • 카카오 로그인 API 사용하기 -2
3unB
3unB
  • 3unB
    ILLILI
    3unB
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • STUDY (107)
        • JAVA (30)
        • SPRING (29)
        • JSP (11)
        • DATABASE (19)
        • HTML (0)
        • CSS (4)
        • GITHUB (2)
        • ETC (4)
        • 자격증 (1)
        • ERROR (6)
      • PROJECT (6)
        • Personal_Project 01 - commu.. (1)
        • TeamProject - JOINUS (4)
      • EUNB (30)
        • 맛집 (27)
        • 여행 (3)
        • 전세사기 (0)
      • 오블완챌린지 ++ (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 짱민지
    • 아랄이
  • 공지사항

  • 인기 글

  • 태그

    전포 밥집
    속초 중앙시장 감자전
    전포 신상 맛집
    mysql
    망미 테린느
    alter
    전포동 카페
    티스토리챌린지
    배열 한 컬럼에 넣기
    서면 설야멱
    oracle
    인제 두부
    전포 연어덮밥
    서면 맛집
    전포동 맛집
    전포 맛집
    전포동 핫플
    속초 해변 숙소
    망미 조용한 카페
    속초 숙소 내돈내산
    인제 고향집
    Database
    망미 카페
    전포 오꼬노미야끼
    오블완
    콩콩팥팥 맛집
    콩콩팥팥 두부
    센텀 신세계백화점 팝업
    전포 데이트
    망미 바
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.0
3unB
카카오 로그인 API 사용하기 - 4(로그인 완료)
상단으로

티스토리툴바