멋쟁이 사자처럼 at 한국교통대학교 7기

2019 KNUT X LIKE LION #7

사용자 토큰 받기(2) - session

토픽 멋쟁이 사자처럼 at 한국교통대학교 7기 > 웹 애플리케이션 개발 > Django
사용자 토큰 받기(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' 값은 로그인 시에 사용되는 부분이고, 그 로그인하는 순간에만 사용이 되어야 하므로 세션을 이용할 것입니다.

 

 

 

장고에서의 세션

  • 장고에서 세션을 활용하기 위해 어떠한 작업이 필요한지 알아봅시다.
     
  • [firstProject]-[settings.py]의 [INSTALLED_APPS]를 보면 'django.contrib.sessions'가 있는 것을 볼 수 있습니다. => (장고 2. 버전은 기본적으로 지원, 다른 버전 사용시 추가)
    장고는 기본적으로 세션을 지원한다는 것을 알 수 있습니다.

 

  • [MIDDLEWARE] 부분을 보면 'django.contrib.sessions.middleware.SessionMiddleware'가 있는 것을 볼 수 있습니다.

 

 

 

 

 

 

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'을 비롯한 값들을 확인할 수 있습니다.

 

 

 

 

 

 

댓글

댓글 본문