본문 바로가기

Django/Authentication

[Django] set_cookie를 이용한 COOKIE에 Token 저장하기 (로그인 할때)

 

1. set_cookie

유저가 로그인에 성공하였을때, 해당 유저에게 발급되는 토큰 (access token, refresh token)이 생성된다.
이 토큰들은 cookie에 저장해야한다.

HttpResponse 또는 JsonResponse에 장고에서 제공하는 set_cookie 메서드를 사용하여, cookie에 토큰 값을 실어서 보낼 수 있다.
HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', 
domain=None, secure=False, httponly=False, samesite=None)

 

2. equest header 정보

Http request header를 출력해보면 header에는 다음과 같은 정보가 담겨져 있다.

{
'Content-Length': '44', 'Content-Type': 'application/json', 'Host': '127.0.0.1:8000', 
'Connection': 'keep-alive', 'Accept': 'application/json, text/javascript, */*; q=0.01', 
'Sec-Fetch-Dest': 'empty', 'X-Csrftoken': 'tokeninfo', 'X-Requested-With': 'XMLHttpRequest', 
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36', 
'Origin': 'http://127.0.0.1:8000', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-Mode': 'cors', 'Referer': 'http://127.0.0.1:8000/login/', 
'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6,zh-CN;q=0.5,zh;q=0.4,fr;q=0.3',
'Cookie': 'csrftoken=csrftoken; sessionid=session info'
}
set_cookie 메서드를 사용하면 발행한 토큰의 정보들이  COOKIE 라는 key의 value로 저장되게 된다.

장고의 auth를 사용하는 경우 csrftoken이라는 정보가 들어가있다. 

 

3. set_cookie 사용 코드

access_token = jwt.encode({'username': user.username}, SECRET_KEY, algorithm = ALGORITHM).decode('utf-8') 
res = JsonResponse({'success':True})
res.set_cookie('access_token', access_token)
access_token : jwt 라이브러리에서 encode 메서드를 이용해서 username과 SECRET_KEY, ALGORITHM을 엔코딩을 한 정보를 access_token이라는 변수로 지정한다.

res.set_cookie : 엔코딩된 access_token 변수를 COOKIE에 저장한다.