我已根据django rest framework Docs实施了令牌认证。django rest框架 - 令牌认证注销
形成我读的,DRF的令牌认证非常简单 - 每个用户一个令牌,令牌不会过期并且始终有效(我对吗?)。
我知道有更好的做法,但现在DRF令牌认证对我来说很好。
我的问题是 -什么是注销的最佳实践与正常DRF令牌认证?
我的意思是,当用户注销时,我应该从客户端删除令牌吗?然后在登录再次获取令牌?我应该删除令牌并生成一个新的令牌吗?
任何有此经验的人?令牌认证的
我已根据django rest framework Docs实施了令牌认证。django rest框架 - 令牌认证注销
形成我读的,DRF的令牌认证非常简单 - 每个用户一个令牌,令牌不会过期并且始终有效(我对吗?)。
我知道有更好的做法,但现在DRF令牌认证对我来说很好。
我的问题是 -什么是注销的最佳实践与正常DRF令牌认证?
我的意思是,当用户注销时,我应该从客户端删除令牌吗?然后在登录再次获取令牌?我应该删除令牌并生成一个新的令牌吗?
任何有此经验的人?令牌认证的
整体思路:
通常,在身份验证服务,没有与令牌相关联的有效期。特定时间过后,令牌将过期。在这里,我们得到一个访问令牌,它有服务器发送的到期时间。现在,客户端需要每次在请求头中发送该令牌,以便服务器可以识别用户是谁。我们可以跟踪它何时到期,或者我们可以继续使用它,直到出现INVALID_TOKEN
错误。在这种情况下,我们将不得不再次从服务器获取令牌。
access_token的生命周期与授予客户端访问权限的用户的登录会话无关。可以说OAuth2没有用户登录或注销或会话的概念。 令牌只是用来标识用户,如果他是谁,他说他是谁。
令牌为唯一为用户和客户端。您可以将它保存为cookies以启用类似于记住我的功能,但在服务器上您不需要删除它。每当令牌过期时,客户端需要向服务器发送请求以再次获取令牌。
令牌到期的DRF令牌Authetication:
目前,DRF令牌认证不支持此功能。您必须自己实施它或使用提供此功能的第三方包。它应该检查令牌过期并在令牌过期时引发异常。
要自己实现它,您可以从DRF令牌认证类继承并添加逻辑。
你甚至可以使用第三方包django-rest-framework-expiring-tokens。
一些参考:
1. Token Authentication for RESTful API: should the token be periodically changed?
2. How to Logout of an Application Where I Used OAuth2 To Login With Google?
感谢您的回答。从我读到的内容来看,DRF令牌永不过期,对吗? –
是的,我认为目前在DRF令牌认证中没有令牌过期的功能。您需要实现您自己的令牌过期逻辑。 –
也许这可能有帮助。 https://github.com/JamesRitchie/django-rest-framework-expiring-tokens –
这听起来像SessionAuthentication是你真正寻找。您可以通过BasicAuthentication或TokenAuthentication启动(登录)会话。然后使用sessionid作为其余api调用的“令牌”。当您注销或超过特定时间时,“令牌”将过期。
如果使用会话验证遇到csrftoken问题,this可能会非常有帮助。
下面是我使用注销一个简单的观点:
from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
class Logout(APIView):
queryset = User.objects.all()
def get(self, request, format=None):
# simply delete the token to force a login
request.user.auth_token.delete()
return Response(status=status.HTTP_200_OK)
然后将其添加到您的urls.py
:
urlpatterns = [
...
url(r'^logout/', Logout.as_view()),
]
的
不错!谢谢! –
对不起,但是'queryset'用于什么? – dangsonbk
可能重复[Django的REST框架 - 理解认证和登录](http://stackoverflow.com/questions/30546258/django-rest-framework-understanding-authentication-and-logging-in) –