
프론트에서 1번까지 해서 인가 코드를 받은 후 백엔드에 넘겨주면
백엔드에서 그 코드를 가지고 카카오 토큰을 발급받는 방법
프론트엔드에서 카카오 인가코드 받기
kakao_authorize_code = json.loads(request.body)['authorize_code']
프론트엔드에서 헤더의 authorization에 카카오에서 발급받은 인가코드를 보내주면 코드를 authorize_code 변수에 담는다.
헤더의 'Authorization'키는 보통 토큰을 받을때 쓰는데 카카오 인가코드는 요청할때마다 바뀌는 값이라서 이렇게 받는게 적합하지 않다.
그래서 바디에 'authorize_code'로 받는 것으로 변경했다.
이 코드를 카카오에 보내면서
프론트에서 코드를 받을때 사용한 redirect_uri를 같이 줘야 한다.
redirect uri는 https://developers.kakao.com/console/app/780521/product/login 여기에 프론트엔드에서 미리 설정해 놓은 주소를 사용했다.(http://localhost:3000/......)
카카오 토큰 발급받기
토큰 요청하는법
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-token-sample
curl -v -X POST "https://kauth.kakao.com/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id=${REST_API_KEY}" \
--data-urlencode "redirect_uri=${REDIRECT_URI}" \
-d "code=${AUTHORIZE_CODE}"
curl 요청하는법: https://reqbin.com/req/python/c-bf0dgjoq/curl--d
(딕셔너리처럼 보내도 된다)
위처럼만 요청하면 KOE010 invalid_client에러가 나는데

이런 이유 때문이다. data에 클라이언트 시크릿 코드까지 전달을 해준다.
KAKAO_TOKEN_URL = 'https://kauth.kakao.com/oauth/token'
redirect_uri = ''
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
'grant_type' : 'authorization_code',
'client_id' : self.rest_api_key,
'redirect_uri' : self.redirect_uri,
'code' : authorize_code,
'client_secret': self.client_secret
}
# 이것도 가능
# data = f'grant_type=authorization_code&client_id={settings.REST_API_KEY}&redirect_uri={redirect_uri}&code={authorize_code}&client_secret={settings.CLIENT_SECRET}'
response = requests.post(KAKAO_TOKEN_URL, headers=headers, data=data)
엑세스토큰 저장하기
토큰 발급에 성공하면 아래의 형태로 response가 온다
{
'access_token': '----',
'token_type': 'bearer',
'refresh_token': '----',
'id_token': '----',
'expires_in': ----,
'scope': 'account_email openid profile_nickname',
'refresh_token_expires_in': ----
}
response를 딕셔너리로 바꾸고 access_token을 저장한다.
data = response.json()
access_token = data.get('access_token')
그리고 이 토큰을 이용해서 유저정보를 확인하고 회원가입이나 로그인을 진행하면 된다!
KOE320 에러
{
'error': 'invalid_grant',
'error_description': 'authorization code not found for code=----',
'error_code': 'KOE320'
}
토큰발급이 안되고 이런 에러메세지가 날 때가 있는데

인가 코드는 요청할 때마다 다른 값으로 바뀌고 한번 사용하면 만료가 되기 때문이다.
나는 처음에 프론트엔드에서 맨 위 사진 1번, 2번, 백엔드에서 3번 -> 프 1, 백 2,3 방법으로 바꾸면서
프론트엔드 코드를 수정하지 않고 테스트를 해서 이미 토큰발급에 사용된 코드로 다시 토큰을 발급하려고 했기 때문에 계속 위의 에러가 났다.
카카오에서 관련에러를 찾아보고 수정해서 토큰발급과 회원가입 로그인에 성공했다.
'wecode' 카테고리의 다른 글
| 마이허니트립 | 예약페이지 승객정보 bulk_create (0) | 2022.08.14 |
|---|---|
| 마이허니트립 | 예약상태 지정에 Enum사용하기 (0) | 2022.08.07 |
| 마이허니트립 | 카카오 로그인 api : 카카오 토큰으로 유저정보 받아서 회원가입, 로그인 시키기 (0) | 2022.08.04 |
| 마이허니트립 | 데이터베이스 모델링 (0) | 2022.08.04 |
| 구방문방구 | 프로젝트 회고 (1) | 2022.08.01 |