django rest framework - 令牌认证注销

Ofe*_*mon 22 login token logout django-rest-framework http-token-authentication

我已经根据django rest框架Docs实现了令牌认证.

从我读到的形式来看,DRF的令牌认证非常简单 - 每个用户一个令牌,令牌不会过期并且始终有效(我是对的吗?).

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

我的问题是 -使用普通DRF令牌身份验证注销的最佳做法什么?

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

有经验的人吗?

Clo*_*ans 30

这是我用来注销的简单视图:

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView

class Logout(APIView):
    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)
Run Code Online (Sandbox Code Playgroud)

然后将其添加到您的urls.py:

urlpatterns = [
    ...
    url(r'^logout/', Logout.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,`queryset`用于什么? (6认同)
  • Nit:注销应该是发布而不是获取:/sf/ask/246490331/ (2认同)

Rah*_*pta 7

托克认证的全部意图:

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

access_token的生命周期独立于授予客户端访问权限的用户的登录会话.假设OAuth2没有用户登录或注销或会话的概念.令牌仅用于识别用户是否是他所说的人.

令牌对于用户和客户端是唯一的.您可以将其保存到cookie以启用类似记住我的内容,但在服务器上您不需要删除它.每当令牌到期时,客户端需要向服务器发送请求以再次获得令牌.

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

目前,DRF令牌身份验证不支持此功能.您必须自己实现它或使用提供此功能的第三方软件包.它应该检查令牌到期并在令牌过期时引发异常.

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

一些参考文献:
1. 令牌认证REST风格的API:应令牌定期更换?
2. 如何注销我使用OAuth2登录Google的应用程序?