작성
·
273
0
def access_token_issue(id):
access_payload = {"id": id,
"exp": timezone.now() + timezone.timedelta(hours=access_token_time),
"iat": timezone.now()}
access_token = jwt.encode(payload=access_payload, key=JWT_SECRET_KEY, algorithm=ALGORITHM, headers=header)
return access_token
res_cookie.set_cookie(key='access_token',
value=access_token_issue(id=user.id),
httponly=True,
samesite=None)
답변 1
3
안녕하세요.
JWT Token을 쿠키에 담아서 전송되게 할 수도 있고, localStorage와 같은 로컬 저장소에 담아두었다가 사용할 수도 있습니다. 쿠키 방식과 로컬스토리지 방식 모두 서버에서 토큰을 생성하여 넘겨준 것입니다.
로컬스토리지에 저장하는 토큰은 이미 서버에서 처리해서 클라이언트로 넘겨준 것을 클라이언트에서는 단지 저장할 뿐입니다.
저도 아래의 포스팅에서의 쿠키 저장방식과 로컬스토리지 저장방식에 대한 설명에 동의합니다.
위 포스팅 설명대로 쿠키 방식 로컬스토리지 방식이 모두 장단점이 있습니다. 저는 로컬스토리지 방식을 보여드린 것이구요. 쿠키 방식으로도 많이 합니다. 선택인 것이죠. 어느 하나가 무조건 나은 선택이라고 할 수는 없습니다.
---
그리고 토큰 발급은 직접 View에 어떻게 적용을 하셨나요? 가급적 jwt 라이브러리의 APIView를 그대로 쓰시어, 오버라이딩하여 Response 객체에 쿠키를 설정하시는 방식을 쓰시는 것이 라이브러리 사용 이점을 살릴 수 있습니다. django-rest-framework-jwt 라이브러리의 경우 JWT_AUTH_COOKIE 옵션을 지원해주고있고, djangorestframework-simplejwt 라이브러리는 cookie 옵션이 없네요. TokenObtainPairView 뷰의 post 메서드를 오버라이딩해보실 수 있으시겠습니다. 참고해서 구현해보세요.
화이팅입니다. :-)