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認証コード(認証コード)
まず
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)
まず
パラメータに値を渡すには、postmanを使用してGETリクエストを行います.
-->承認コードの取得に成功しました.
2. How to get access_token
postmanを使用して、POSTリクエストを介してパラメータに値を渡します.
-->access tokenの取得に成功しました.
3. How to get user information
CSRF防御
これからよく勉強するつもりです.
Reference
この問題について(TIL DAY 32-2 || Kakao Login API with Django), 我々は、より多くの情報をここで見つけました
https://velog.io/@tk_kim/TIL-DAY-32-Kakao-Login-API-with-Django
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(TIL DAY 32-2 || Kakao Login API with Django), 我々は、より多くの情報をここで見つけました https://velog.io/@tk_kim/TIL-DAY-32-Kakao-Login-API-with-Djangoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol