๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ก ๊ณตํ•™์ž/์ฝ”๋”ฉ ์„œํ•‘

์Ÿ๊ณ ์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ api ์‚ฌ์šฉํ•˜๊ธฐ

์นด์นด์˜ค ๋””๋ฐธ๋กœํผ ๋“ฑ๋กํ•˜๊ธฐ

์นด์นด์˜ค ๋””๋ฐธ๋กœํผ์—์„œ ์ž์‹ ์˜ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•œ๋‹ค. ์ด ๋•Œ, ์œ ์ €์˜ ํŠน์ • ์ •๋ณด์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋“ฑ๋ก๋œ ์‚ฌ์—…์ž ๋ฒˆํ˜ธ๋ฅผ ํ•จ๊ป˜ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

  1. ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์–ผ๋งˆ์ „ ์ถœ์‹œํ•œ ๋ฏธํŒ…์‹œ๊ทธ๋„ ์•ฑ์œผ๋กœ ๋“ฑ๋ก์„ ํ•ด๋ณด์•˜๋‹ค.
  1. ์นด์นด์˜ค ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฐ๋™์„ ํ•˜๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋น„์Šค์— ๋„˜๊ฒจ์ค„์ง€์— ๋Œ€ํ•ด ๋™์˜ํ•ญ๋ชฉ์„ ์„ค์ •ํ•œ๋‹ค.
  2. ์นด์นด์˜ค ๋กœ๊ทธ์ธ ํ™œ์„ฑํ™”ํ•˜๊ธฐ
  3. ์นด์นด์˜ค ๋กœ๊ทธ์ธ Redirect URI ์„ค์ •ํ•˜๊ธฐ

    Redirect URI์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋ž˜์—์„œ ๋ณด๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.

์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ณผ์ •

์นด์นด์˜ค ๋กœ๊ทธ์ธ์€ ์„œ๋น„์Šค ์„œ๋ฒ„์˜ ํšŒ์›๊ฐ€์ž… uri → https://kauth.kakao.com/oauth/authorize → redirect uri → https://kauth.kakao.com/oauth/tokenhttps://kapi.kakao.com/v2/user/me ์˜ ์ˆœ์œผ๋กœ ์ด์–ด์ง„๋‹ค.

  • ์Ÿ๊ณ ์—์„œ ํšŒ์›๊ฐ€์ž… uri๋ฅผ http://localhost:8000/accounts/signin/kakao/ ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  signin/kakao์—์„œ REST_API_KEY ์™€ redirect_uri ์„ ๋‹ด์•„์„œ ์นด์นด์˜ค ์ธ์ฆ(oauth/authorize)์œผ๋กœ ์ ‘์†ํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ redirect_uri ๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ ์ธ์ฆ์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ, ๋‹ค์‹œ ์žฌ์ ‘์†ํ•˜๋Š” uri์ด๋‹ค.
  • ์นด์นด์˜ค ์ธ์ฆ์€ ๋กœ๊ทธ์ธ ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด code ๋ผ๊ณ  ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋œ๋‹ค. ์ด code ๋ฐ์ดํ„ฐ๋Š” ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.
  • { "data": { "code": "ํŠน์ •๋ฌธ์ž์—ด" } }
  • ์žฌ์ ‘์†ํ•œ uri์—์„œ๋Š” code ๋ฐ์ดํ„ฐ๋ฅผ oauth/token์œผ๋กœ ๋ณด๋‚ด์ฃผ๊ฒŒ ๋˜๊ณ , ์—ฌ๊ธฐ์„œ ์ธ์ฆ์ด ํ†ต๊ณผ๋˜๋ฉด ํ† ํฐ์ด ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • { "token": { "access_token": "", "refresh_token": "", ... } }
  • ์ด token ๋ฐ์ดํ„ฐ๋กœ kapi.kakao.com/v2/user/me ์— ์ ‘์†ํ•˜๋ฉด ํ•ด๋‹น ์œ ์ €์˜ ๋™์˜ํ•œ ํ•ญ๋ชฉ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์Ÿ๊ณ ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

์šฐ์„  ์นด์นด์˜ค ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•œ ๋ทฐ KakaoSignInView ๋ฅผ ์ •์˜ํ•œ๋‹ค.

from django.shortcuts import render, redirect
from django.views import View

class KakaoSignInView(View):
    def get(self, request):
        app_key = KAKAO_REST_API_KEY
        redirect_uri = 'http://localhost:8000/accounts/signin/kakao/callback'
        kakao_auth_api = 'https://kauth.kakao.com/oauth/authorize?response_type=code'

        return redirect(
            f'{kakao_auth_api}&client_id={app_key}&redirect_uri={redirect_uri}'
        )
  • accounts/signin/kakao/ uri ์— get์œผ๋กœ ์ ‘์†ํ•˜๋ฉด ์‹คํ–‰ํ•œ๋‹ค.
  • ์นด์นด์˜ค oauth/authorize/ ์— api ํ‚ค์™€ ์žฌ์ ‘์†ํ•  uri ์„ ๋‹ด์•„์„œ ์ ‘์†ํ•œ๋‹ค.
  • oauth/authorize/ ๋Š” ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ ์—ด๊ณ , ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜๋ฉด ์นด์นด์˜ค ๋””๋ฐธ๋กœํผ์—์„œ ์„ค์ •ํ•œ ๋™์˜ํ•ญ๋ชฉ์— ๋™์˜ํ•˜๋ผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋œฌ๋‹ค.
  • ๋™์˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์žฌ์ ‘์† uri๋กœ ์žฌ์ ‘์†ํ•œ๋‹ค.
  • ์ด ๋•Œ, ์žฌ์ ‘์† uri๋Š” KaKaoSignInCallBackView ์œผ๋กœ ์ •์˜๋œ๋‹ค.
from django.shortcuts import render, redirect
from django.views import View
from django.http import JsonResponse
import requests

class KaKaoSignInCallBackView(View):
    def get(self, request):
        auth_code = request.GET.get('code')
        kakao_token_api = 'https://kauth.kakao.com/oauth/token'
        data = {
            'grant_type': 'authorization_code',
            'client_id': KAKAO_REST_API_KEY,
            'redirection_uri': 'http://localhost:8000/accounts/signin/kakao/callback',
            'code': auth_code
        }

        token_response = requests.post(kakao_token_api, data=data)

        access_token = token_response.json().get('access_token')

        user_info_response = requests.get('https://kapi.kakao.com/v2/user/me', headers={"Authorization": f'Bearer ${access_token}'})

        return JsonResponse({"user_info": user_info_response.json()})
  • ์žฌ์ ‘์†์„ ํ• ๋•Œ ์นด์นด์˜ค ์ธ์ฆ์—์„œ code ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ์ด๋Š” ํ† ํฐ์„ ๋ฐ›์•„์˜ฌ ๋•Œ ํ•„์š”ํ•˜๋‹ค.
  • oauth/token/ ์— post ๋ฉ”์†Œ๋“œ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ ‘์†ํ•˜์—ฌ ํ† ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋ฐ›์•„์˜จ token json ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด kapi.kakao.com/v2/user/me ์— ์ ‘์†ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์Œ์—์„œ ์ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํšŒ์›๊ฐ€์ž…์„ ์‹œํ‚ค๋Š” ๋กœ์ง์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

์นด์นด์˜ค ๋””๋ฐธ๋กœํผ rest api ๊ณต์‹๋ฌธ์„œ

Django๋กœ ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•ด๋ณด์ž

๋ฌธ์ œ์  ์žˆ์„ ๋•Œ

๋ฐ˜์‘ํ˜•