์นด์นด์ค ๋๋ฐธ๋กํผ ๋ฑ๋กํ๊ธฐ
์นด์นด์ค ๋๋ฐธ๋กํผ์์ ์์ ์ ์๋น์ค๋ฅผ ๋ฑ๋กํ๋ค. ์ด ๋, ์ ์ ์ ํน์ ์ ๋ณด์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ํด์๋ ๋ฑ๋ก๋ ์ฌ์ ์ ๋ฒํธ๋ฅผ ํจ๊ป ์ ๋ ฅํด์ผ ํ๋ค.
- ํ
์คํธ์ฉ์ผ๋ก ์ผ๋ง์ ์ถ์ํ ๋ฏธํ
์๊ทธ๋ ์ฑ์ผ๋ก ๋ฑ๋ก์ ํด๋ณด์๋ค.
- ์นด์นด์ค ๋ก๊ทธ์ธ์ผ๋ก ์ฐ๋์ ํ๋ฉด ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์๋น์ค์ ๋๊ฒจ์ค์ง์ ๋ํด ๋์ํญ๋ชฉ์ ์ค์ ํ๋ค.
- ์นด์นด์ค ๋ก๊ทธ์ธ ํ์ฑํํ๊ธฐ
- ์นด์นด์ค ๋ก๊ทธ์ธ Redirect URI ์ค์ ํ๊ธฐ
Redirect URI์ด ์๋ฏธํ๋ ๊ฒ์ ์๋์์ ๋ณด๋๋ก ํ ๊ฒ์ด๋ค.
์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์
์นด์นด์ค ๋ก๊ทธ์ธ์ ์๋น์ค ์๋ฒ์ ํ์๊ฐ์
uri → https://kauth.kakao.com/oauth/authorize
→ redirect uri → https://kauth.kakao.com/oauth/token
→ https://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 ๊ณต์๋ฌธ์
๋ฐ์ํ
'๐ก ๊ณตํ์ > ์ฝ๋ฉ ์ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[react native]์น์์ผ ์ ์ฉํ๊ธฐ (0) | 2021.10.02 |
---|---|
[web]Firebase์ ๊ฐ๋จ ์นํธ์คํ ํ๊ธฐ (0) | 2021.09.28 |
[web]Godaddy ์ปค์คํ ๋๋ฉ์ธ Firebase์ ์ฐ๊ฒฐํ๊ธฐ (0) | 2021.09.28 |
[react]Context Api ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌํ๊ธฐ (0) | 2021.09.28 |
[django]Session Authentication๊ณผ Cookie (0) | 2021.09.28 |