mjeongriver
article thumbnail
Published 2023. 1. 9. 15:24
day63-js TIL/Javascript

1. day62-js 카카오 로그인

 

기존에는 get 방식으로 request get parameter해서 서버에서 받아올 수 있음(get방식으로 키가 온 거임)
content-type: 요청에 대한 데이터 타입

 

- google에서 js 쿼리 스트링 값 가져오기 검색

 

 

* 예제 - 카카오 로그인 연결

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <!-- 카카오 SDK로드 -->
    <script src="js/kakao.min.js"></script>

</head>

<body>

    <a id="kakao-login-btn" href="javascript:loginWithKakao()">
        <img src="https://k.kakaocdn.net/14/dn/btroDszwNrM/I6efHub1SN5KCJqLm1Ovx1/o.jpg" width="222" alt="카카오 로그인 버튼" />
    </a>

    <script>

        //1. 카카오 SDK초기화
        Kakao.init(''); //내 애플리케이션 자바스크립트 키

        console.log(Kakao.isInitialized());


        //2.카카오로그인화면 띄우기
        //로그인 성공시 페이지 이동 5번
        function loginWithKakao() {
            Kakao.Auth.authorize({
                redirectUri: 'http://127.0.0.1:5501/09Ajax/index05.html',
            });
        }

        //3.인가코드 받아오기
        var URLSearch = new URLSearchParams(location.search);
        //console.log(URLSearch.get("code"));
        if (URLSearch.get("code") != null) {
            ajax();
        }

        //4. 토큰 발급 요청(post 방식, 폼형식)-구글에 fetch post 검색해서 참고(mdn이랑 카카오 설명하고 같이 볼 것)
        function ajax() {

            //JSON 형식의 POST 요청
            // var data = {
            //     grant_type: "authorization_code",
            //     client_id: "", //카카오 내 애플리케이션에서 본인 rest api 키
            //     redirect_uri: "http://127.0.0.1:5501/09Ajax/index05.html",
            //     code: URLSearch.get("code")
            // }

            // fetch("https://kauth.kakao.com/oauth/token", {
            //     method: "POST",
            //     headers: {
            //         "Content-Type": "application/json" //..
            //     },
            //     body: JSON.stringify(data)
            //     })
            //     .then(function (res) {
            //         console.log(res);
            //     })

            //Form 형식의 POST 요청
            //formData 객체 이용 or 문자열

            var url = "http://127.0.0.1:5501/09Ajax/index05.html";
            var data = "grant_type=authorization_code" +
                "&client_id=" + //내 애플리케이션 REST API 키
                "&redirect_uri=" + url +
                "&code=" + URLSearch.get("code");
            fetch("https://kauth.kakao.com/oauth/token", {
                method: "POST",
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded;charset=utf-8",
                    // "Authorization" : "Bearer" + 토큰 + "/KakaoAK" + 토큰 //문서-카카오 로그인-rest API-사용자 정보 가져오기
                },
                body: data
            })
                .then(function (res) {
                    return res.json();
                })
                .then(function (data) {
                    console.log(data);
                    //sessionStorage or cookie
                    sessionStorage.setItem("access_token", data.access_token); //앞에 키, 뒤에가 값(콘솔로그로 찍은 값 개발자 도구로 확인-상황에 따라 다를 수 있음)
                    //카카오 API 함수-문서, 카카오 로그인, javascript, 토큰 할당하기
                    Kakao.Auth.setAccessToken(data.access_token);

                    //토큰을 발급하고 사용자 정보를 받아오기를 호출함(밑에 함수)
                    requestUserInfo();
                })

            //5. 사용자 정보 받아오기(문서-카카오 로그인-javaScript에서 사용자 정보 가져오기)
            function requestUserInfo() {
                //카카오 API 내장 함수를 호출함 - kakao.min.js에 있음
                Kakao.API.request({
                    url: '/v2/user/me',
                })
                    .then(function (res) {
                        console.log(res); 
                        console.log(res.Kakao_account.email); //사용자 이메일
                        console.log(res.Kakao_account.profile.nickname); //사용자 닉네임
                        console.log(res.Kakao_account.profile.profile_image_url); //사용자 프로필

                        //이 정보를 가지고, 우리 데이터베이스에서 조회 or 로그인 하는 작업으로 연결
                        //처리하는 페이지로
                        sessionStorage.setItem("info", JSON.stringify({id: res.kakao_account.email,
                                                               nick: res.kakao_account.profile.nickname }) );
                        location.href = "index06.html";
                    
                    })
                    .catch(function (error) {
                        console.log(error);
                    });
            }


        }


    </script>



</body>

</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <h3>결과 페이지</h3>

    <a href="index05.html">로그인 창으로</a>


</body>
</html>

 

* 카카오, 네이버 등 다른 api 활용해서 가져와보는 연습 해볼 것

'TIL > Javascript' 카테고리의 다른 글

day64-JS ES6 문법  (0) 2023.01.12
day62-js  (0) 2023.01.06
day61-js  (0) 2023.01.05
day60-js  (0) 2023.01.04
day59-js  (1) 2023.01.03
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그