【发布时间】:2016-10-11 05:28:39
【问题描述】:
我正在尝试使用 django-rest-framework 和 django-rest-auth by tivix (link to documentation) 实现身份验证。我使用 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.'}
【问题讨论】:
-
你试过
user.auth_token.delete()吗? -
@HåkenLid 因为我必须有权访问用户对象。我直接在 Angular 应用程序中提供登录 url,因为它返回令牌和注销相同。所以它使用包预定义视图。
-
您如何退出?你能显示代码和响应吗? api 视图端点应该会导致令牌被删除。
-
您必须在退出时使用令牌进行身份验证。我不确定为什么权限是
AllowAny,但看起来即使用户未登录,视图也不会返回错误状态。github.com/Tivix/django-rest-auth/blob/v0.7.0/rest_auth/… -
@HåkenLid 我在发送注销 POST 请求时将令牌传递给数据。我还添加了登录和注销的 url 和 curl 请求。
标签: django authentication django-rest-framework django-rest-auth