令牌认证注销

我已经根据django rest框架文档实现了令牌认证。

形成我读到的,DRF的令牌认证非常简单 - 每个用户一个令牌,令牌不会过期,并且始终有效( 对不对? )。

我知道有更好的做法,但现在DRF令牌认证对我来说很好。

我的问题是 -使用正常的DRF令牌认证注销的最佳做法什么?

我的意思是,当用户注销时 ,我应该从客户端删除令牌吗? 然后登录再次获取令牌? 我应该删除令牌并生成一个新的令牌吗?

任何有此经验的人?


以下是我用于注销的简单视图:

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()),
]

令牌认证的整体思想:

通常在身份验证服务中,有一个与令牌关联的生命周期。 特定时间过后,令牌将过期。 在这里,我们得到一个访问令牌,它有服务器发送的到期时间。 现在,客户端需要每次在请求头中发送该令牌,以便服务器可以识别用户是谁。 我们可以跟踪它何时到期,或者我们可以继续使用它,直到出现INVALID_TOKEN错误。 在这种情况下,我们将不得不再次从服务器获取令牌。

access_token的生命周期与授予客户端访问权限的用户的登录会话无关。 可以说OAuth2没有用户登录或注销或会话的概念。 令牌只是用来标识用户,如果他是谁,他说他是谁。

令牌对用户和客户端是唯一的。 您可以将它保存为cookies以启用类似于记住我的功能,但在服务器上您不需要删除它。 每当令牌过期时,客户端需要向服务器发送请求以再次获取令牌。

DRF令牌认证中的令牌到期:

目前,DRF令牌认证不支持此功能。 您必须自己实施它或使用提供此功能的第三方包。 它应该检查令牌过期并在令牌过期时引发异常。

要自己实现它,您可以从DRF令牌认证类继承并添加您的逻辑。
你甚至可以使用第三方软件包django-rest-framework-expiring-tokens。

一些参考:
1. RESTful API的令牌认证:是否应定期更改令牌?
2.如何注销我使用OAuth2使用Google登录的应用程序?


听起来像SessionAuthentication是你真正想要的。 您可以通过BasicAuthentication或TokenAuthentication启动(登录)会话。 然后使用sessionid作为其余api调用的“令牌”。 当您注销或超过特定时间时,“令牌”将过期。

如果您使用会话身份验证遇到csrftoken问题,这可能会非常有帮助。

链接地址: http://www.djcxy.com/p/33773.html

上一篇: token authentication logout

下一篇: Django rest framework: Obtain auth token using email instead username