drf django rest auth 如何过期或删除令牌?
drf django rest auth how to expire or delete token?
我正在尝试通过 tivix (link to documentation) 使用 django-rest-framework
和 django-rest-auth
来实现身份验证。我使用 django shell 创建了一个用户,例如:
from django.contrib.auth.models import User
user = User.objects.create_user(username='foo', email='foo@bar.com', password='bar')
user.save()
然后根据 Documentation 我使用 django-rest-auth
登录了一个用户,例如(终端命令):
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')),
settings.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.'}
您必须登录才能删除令牌。
这里是 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 Token Authentication 及其使用方法的文档
编辑
添加了有关 DRF 令牌身份验证的信息
我正在尝试通过 tivix (link to documentation) 使用 django-rest-framework
和 django-rest-auth
来实现身份验证。我使用 django shell 创建了一个用户,例如:
from django.contrib.auth.models import User
user = User.objects.create_user(username='foo', email='foo@bar.com', password='bar')
user.save()
然后根据 Documentation 我使用 django-rest-auth
登录了一个用户,例如(终端命令):
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')),
settings.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.'}
您必须登录才能删除令牌。
这里是 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 Token Authentication 及其使用方法的文档
编辑
添加了有关 DRF 令牌身份验证的信息