def post(self, request):
serializer = LogoutSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({"message":"로그아웃 성공되었습니다."}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class LogoutSerializer(serializers.Serializer):
refresh = serializers.CharField()
def validate(self, attrs):
self.token = attrs['refresh']
return attrs
def save(self, **kwargs):
try:
RefreshToken(self.token).blacklist()
except TokenError:
raise serializers.ValidationError(detail={"만료된 토큰":"유효하지 않거나 만료된 토큰입니다."})
- RefreshToken을 받아 Logoutserializer로 보내어 blacklist()라는 곳에 저장한다. (blacklist 관련 링크) blacklist라는 것을 사용하게 되면 재사용되는 토큰을 막을 수 있고 토큰의 기록을 볼 수 있다.
- 리눅스의 crontab 명령어를 사용하여 python manage.py flushexpiredtokens를 주기적으로 갱신하면 blacklist에 저장되어있던 것들을 초기화 할 수 있다.