如何删除django JWT令牌?

Luc*_*uca 4 python django rest jwt

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

我可以成功创建令牌并使用它们来调用受保护的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)
Run Code Online (Sandbox Code Playgroud)

request.auth只是一个字符串对象.所以,这当然不会起作用,但我不确定如何清除底层令牌.

编辑

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

luc*_*tti 5

是的,说JWT令牌没有存储在数据库中是正确的.但是,您想要的是根据用户活动使令牌无效,这似乎不可能是ATM.

因此,您可以在问题中执行建议,或将用户重定向到某个令牌刷新端点,甚至手动创建新令牌.


Rhy*_*ang 5

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