如何删除django JWT令牌?

时间:2016-11-15 08:10:50

标签: python django rest jwt

我正在使用github(https://github.com/GetBlimp/django-rest-framework-jwt/tree/master/)上的Django休息框架JSON Web令牌API。

我可以成功创建令牌并使用它们来调用受保护的REST AP。但是,在某些情况下,我希望在到期时间之前删除特定令牌。所以我想用这样的观点做到这一点:

class Logout(APIView):
    permission_classes = (IsAuthenticated, )
    authentication_classes = (JSONWebTokenAuthentication, )

    def post(self, request):
        # simply delete the token to force a login        
        request.auth.delete()  # This will not work
        return Response(status=status.HTTP_200_OK)

request.auth只是一个字符串对象。所以,这当然不会起作用,但我不确定如何清除基础代币。

修改

更多地了解这一点,似乎我不需要做任何事情,因为JWT在服务器端没有任何东西。因此,只需关闭应用程序并在下次登录时重新生成令牌即可。这是对的吗?

2 个答案:

答案 0 :(得分:5)

是的,说JWT令牌没有存储在数据库中是正确的。但是,您想要的是根据用户活动which doesn't seem to be possible ATM使令牌无效。

因此,您可以在问题中执行建议,或将用户重定向到某些token refreshing endpoint,甚至manually create a new token

答案 1 :(得分:4)

JWT的最大缺点是,由于服务器未保存会话状态,因此在使用过程中无法废除令牌或更改令牌的权限。也就是说,一旦JWT签名,它将一直有效直到它到期,除非服务器部署了其他逻辑。   因此,即使创建新令牌或刷新令牌,也无法使令牌无效。注销的一种简单方法是从客户端删除令牌。