Django JWT Logout

GisangLee·2022년 10월 17일
1

django

목록 보기
24/35

1. 원리

로그아웃을 호출하는 순간 클라이언트는 access 토큰을 삭제하고,
refresh 토큰을 데이터로 보낸다.
서버는 refresh 토큰을 블랙리스트에 저장시킨다.


2. 코드

from rest_framework_simplejwt.tokens import RefreshToken


class LogoutView(generics.CreateAPIView):
    permission_classes = (IsAuthenticated,)
    ...
    ..

class LogoutSerializer(serializers.Serializer):

	refresh_token = serializers.CharField(write_only=True)
    message = serializers.CharField(read_only=True)
    
    def __logout(self, request):
    	refresh_token = request.data["refresh_token"]
		token = RefreshToken(refresh_token)
        token.blacklist()
    
    def validate(self, attrs):
    	
        attrs["user"] = self.context.get("request").user

        return attrs

    @transaction.atomic
    def create(self, validated_data):
    	res = dict()
        
    	try:
        	with transaction.atomic():
   				self.__logout(self.context.get("request"))
        		res.update({"message": "로그아웃 되었습니다."})
        		return res
                
		except Exception as e:
        	logger.error("error")
            logger.error(e)
            res.update({"message": "서버 에러"})
            return res
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글