我正在使用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在服务器端没有任何东西。因此,只需关闭应用程序并在下次登录时重新生成令牌即可。这是对的吗?
答案 0 :(得分:5)
是的,说JWT令牌没有存储在数据库中是正确的。但是,您想要的是根据用户活动which doesn't seem to be possible ATM使令牌无效。
因此,您可以在问题中执行建议,或将用户重定向到某些token refreshing endpoint,甚至manually create a new token。
答案 1 :(得分:4)
JWT的最大缺点是,由于服务器未保存会话状态,因此在使用过程中无法废除令牌或更改令牌的权限。也就是说,一旦JWT签名,它将一直有效直到它到期,除非服务器部署了其他逻辑。 因此,即使创建新令牌或刷新令牌,也无法使令牌无效。注销的一种简单方法是从客户端删除令牌。