10

我正在尝试使用tivixdjango-rest-frameworkdjango-rest-auth通过 tivix 实现身份验证(链接到文档)。我使用 django shell 创建了一个用户,例如:

from django.contrib.auth.models import User
user = User.objects.create_user(username='foo', email='foo@bar.com', password='bar')
user.save()

然后根据文档django-rest-auth,我使用like(终端命令)登录了一个用户:

curl -X POST -d "username=foo&password=bar&email=foo@bar.com" http://127.0.0.1:8000/rest-auth/login/

它返回了一个令牌,我知道用户已通过身份验证。

现在我使用 django-rest-auth 文档中描述的方法退出,我仍然可以看到数据库中存在的令牌。然后我再次登录,它返回与密钥相同的令牌。

那么,每次用户注销时,是否有任何方法可以更改或更好地删除令牌。此外,文档中也没有提及令牌本身是否会在一定时间过后过期(自动删除)。

如果不可能,我如何在这两种情况下删除令牌?

编辑:登录和注销代码

urls.py(主要):

url(r'^rest-auth/', include('rest_auth.urls')),

设置.py:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    ...
]

登录 CURL 命令:(以上给出)。登录命令响应:

{u'key': u'e41f0a1c2f5e55569df1c41d1d5d4efb77beddee'}

注销 CURL 命令:

curl -X POST -d "key=e41f0a1c2f5e55569df1c41d1d5d4efb77beddee" http://127.0.0.1:8000/rest-auth/logout/

注销响应:

{u'success': u'Successfully logged out.'}
4

1 回答 1

20

您必须登录才能删除令牌。

以下是如何django-rest-auth处理注销(ref):

def post(self, request):
    return self.logout(request)

def logout(self, request):
    try:
        request.user.auth_token.delete()
    except (AttributeError, ObjectDoesNotExist):
        pass

    logout(request)

    return Response({"success": _("Successfully logged out.")},
                    status=status.HTTP_200_OK)

所以要注销:

curl -X POST -H "Authorization: Token <token>" http://127.0.0.1:8000/rest-auth/logout/

请注意,django-rest-auth支持基于会话和 DRF 令牌身份验证。

这是有关DRF 令牌身份验证及其使用方法的文档

编辑

添加了有关 DRF 令牌身份验证的信息

于 2016-06-10T10:43:41.673 回答