사용자 토큰 받기(2)
- 이전 토픽에서 curl로 'access_token'을 가져와 보았습니다.
- 이제 장고에서 'access_token' 값을 가져올 수 있도록 수정해 봅시다.
session
- [views.py]에서 oauth() 함수에서 'code' 값을 가져왔으니 이 값을 대입만 하면 됩니다.
하지만, 한 가지 문제가 있습니다.
oauth() 함수에서 'code' 값을 대입하기 전에 'REST API 키' 값과 'redirect_uri' 값이 또 필요하다는 점입니다.
물론 다시 변수를 설정하여 대입하거나 직접 대입하여 해결할 수도 있습니다.
그러나 이는 나중에 혹시라도 'REST API 키'값 또는 'redirect_uri' 값을 수정해야 된다면 굉장히 번거로운 작업이 될 것입니다.(나중에 일일이 찾아서 수정해야되기 때문입니다.)
- 이를 해결하기 위해 'session'이라는 것을 이용하여 해결해보려고 합니다.
장고는 세션에 관련된 전반적인 과정을 지원합니다. - 세션이란 간단히 말씀드리면 클라이언트와 서버 사이에서 전달되는 일정 시간동안 유지되는 값입니다.
예를 들어 클라이언트가 서버에 로그인을 한다고 했을 때, 클라이언트가 가지고 있는 데이터들을 하나의 세션상태로 보고 유지시키는 것입니다. 이는 로그아웃을 할 때까지 유지되며 이후에는 세션이 끊어지게 됩니다.
- 쿠키(Cookie)와 세션은 비슷한 개념입니다.
쿠키에 대해서 얼핏 들어본 적이 있을 것입니다.
쿠키도 사용자의 정보를 저장한다는 점에서는 세션과 비슷한 개념입니다.
차이점은 쿠키는 클라이언트의 컴퓨터에 정보를 저장하고 세션은 서버에 정보를 저장한다는 점입니다.
- 원래는 보통 사용자의 정보를 가지고 세션 값을 활용하게 되지만 어쨌든 'REST API 키'값이나 'redirect_uri' 값은 로그인 시에 사용되는 부분이고, 그 로그인하는 순간에만 사용이 되어야 하므로 세션을 이용할 것입니다.
- 참고)
세션이란?
https://ko.wikipedia.org/wiki/세션_(컴퓨터_과학)
https://zetawiki.com/wiki/세션,_HTTP_세션
https://88240.tistory.com/190
쿠키와 세션의 차이점
https://zetawiki.com/wiki/쿠키와_세션_차이점
장고에서의 세션
- 장고에서 세션을 활용하기 위해 어떠한 작업이 필요한지 알아봅시다.
- [firstProject]-[settings.py]의 [INSTALLED_APPS]를 보면 'django.contrib.sessions'가 있는 것을 볼 수 있습니다. => (장고 2. 버전은 기본적으로 지원, 다른 버전 사용시 추가)
장고는 기본적으로 세션을 지원한다는 것을 알 수 있습니다.
- [MIDDLEWARE] 부분을 보면 'django.contrib.sessions.middleware.SessionMiddleware'가 있는 것을 볼 수 있습니다.
- 참고)
장고 공식 문서에 나오는 session 사용법 :
https://docs.djangoproject.com/ko/2.2/topics/http/sessions/
detail() 수정
- 이제 detail() 함수 안에 선언된 'client_id' 값과 'redirect_uri' 값을 세션에 담아서 oauth()로 보내도록 수정하여 봅시다.
- 'client_id'와 'redirect_uri'라는 세션 변수 이름에 'client_id'와 'redirect_uri' 값을 대입만 하면 됩니다.
- 다음과 같이 추가합니다.
request.session['client_id'] = client_id request.session['redirect_uri'] = redirect_uri
oauth() 수정
- 위에서 'client_id'와 'redirect_uri' 값을 세션으로 보냈으니 oauth()에서는 그 세션 값들을 받아오도록 하겠습니다.
- 다음 코드를 추가합니다.
- get() 함수를 이용하여 세션 값들을 받아올 수 있습니다.
client_id = request.session.get('client_id') redirect_uri = request.session.get('redirect_uri')
- 이제 'code' 값을 추가하여 'access_token'을 얻을 수 있는 최종 uri를 구성해보도록 합시다.
- 마지막에 최종 uri를 print()하여 주소가 올바르게 작성되었는지 확인해보도록 합니다.
access_token_request_uri = "https://kauth.kakao.com/oauth/token?grant_type=authorization_code&" access_token_request_uri += "client_id=" + client_id access_token_request_uri += "&redirect_uri=" + redirect_uri access_token_request_uri += "&code=" + code print(access_token_request_uri)
적용 확인
- 서버를 구동하고 댓글을 작성한 뒤 정상적으로 작동하는지 확인합니다.
- 출력된 최종 uri를 클릭해봅니다.
- 'access_token'을 비롯한 값들을 확인할 수 있습니다.