TIL DAY 32-2 || Kakao Login API with Django


Python Django Kakao API Login


Only Backend side Without Frontend


前述したように、このコードはバックグラウンドで独自にすべてのことを処理するコードであり、フロントエンドはありません.
import jwt
import requests

from django.shortcuts import redirect
from django.views     import View
from django.http      import JsonResponse

from .models import User

from my_settings import SECRET_KEY, HASHING_ALGORITHM, KAKAO_RESTAPI_KEY


KAKAO_REDIRECT_URL         = 'http://localhost:8000/user/login/kakao/oauth'
KAKAO_TOKEN_REQUEST_URL    = 'https://kauth.kakao.com/oauth/token'
KAKAO_USERINFO_REQUEST_URL = 'https://kapi.kakao.com/v2/user/me'


class KakaoLoginView(View):
    def get(self, request):
        client_id    = KAKAO_RESTAPI_KEY
        redirect_url = KAKAO_REDIRECT_URL

        return redirect('https://kauth.kakao.com/oauth/authorize?client_id={}&redirect_uri={}&response_type=code'.format(client_id, redirect_url))


class KakaoLoginCallbackView(View):
    def get(self, request):
        try:
            code = request.GET.get('code')

            data = {
                    'grant_type'  : 'authorization_code',
                    'client_id'   : KAKAO_RESTAPI_KEY,
                    'redirect_uri': KAKAO_REDIRECT_URL,
                    'code'        : code
                }

            token_response = requests.post(KAKAO_TOKEN_REQUEST_URL, data=data).json()

            access_token  = token_response.get('access_token')
            refresh_token = token_response.get('refresh_token')
            error         = token_response.get('error')

            if error:
                return JsonResponse({'message': 'INVAILD_REQUEST, {}'.format(error)}, status=400)

            headers = {'Authorization': 'Bearer {}'.format(access_token)}

            response = requests.get(KAKAO_USERINFO_REQUEST_URL, headers=headers).json()

            kakao_user_id       = response.get('id')

            if kakao_user_id:
                user, _   = User.objects.get_or_create(kakao_id=kakao_user_id)
                jwt_token = jwt.encode({'user_id': user.id}, SECRET_KEY, algorithm=HASHING_ALGORITHM)
    
                return JsonResponse({'token' : jwt_token}, status=200)
            else:
                return JsonResponse({'message': 'INVALID_ACCESS_TOKEN'}, status=400)

        except KeyError:
            return JsonResponse({'message': 'KEY_ERROR'}, status=400)

1.How to get認証コード(認証コード)


まず
  • RESTAPI KEYで認証コードを取得する必要があります.
  • KakaoAPIリストの承認コード部分を参考にしてみましょう.

    パラメータに値を渡すには、postmanを使用してGETリクエストを行います.

    -->承認コードの取得に成功しました.

    2. How to get access_token

  • で受信した承認コードを使用してaccess tokenを受信する必要があります.
  • KakaoAPIの明細の受け取りコイン部分を見てみましょう.

    postmanを使用して、POSTリクエストを介してパラメータに値を渡します.

    -->access tokenの取得に成功しました.

    3. How to get user information

  • 受信したアクセスtokenは、Kakao Talkに加入したユーザ情報を受信することができる.
  • CSRF防御


    これからよく勉強するつもりです.