7
每次用戶登錄時,我想撤銷之前的令牌。這意味着要生成新令牌(或至少更改現有模型實體的密鑰)。這聽起來很簡單,但在DRF文檔中,我沒有看到任何提及的情況。文檔似乎假設令牌始終保持不變。這只是一個簡單的例子,還是我錯過了什麼?我的問題是:每次用戶登錄時更改標記是否有問題?每次用戶登錄時更改TokenAuthentication的令牌
每次用戶登錄時,我想撤銷之前的令牌。這意味着要生成新令牌(或至少更改現有模型實體的密鑰)。這聽起來很簡單,但在DRF文檔中,我沒有看到任何提及的情況。文檔似乎假設令牌始終保持不變。這只是一個簡單的例子,還是我錯過了什麼?我的問題是:每次用戶登錄時更改標記是否有問題?每次用戶登錄時更改TokenAuthentication的令牌
Django REST Framework提供的TokenAuthentication
旨在用於簡單的情況,其中令牌永不需要更改,並且只有一個用戶令牌。
該文檔似乎假設令牌始終保持不變。
這是正確的。任何額外的事情都必須獨立實施。
我想每一次撤銷之前令牌用戶登錄。
您可以通過消除對誰是登錄用戶的任何令牌認證視圖做到這一點。
from rest_framework.authtoken.models import Token
Token.objects.filter(user=the_user).delete()
如果您使用的是用於令牌認證的視圖,那麼您將需要subclass them來始終爲用戶獲取新的令牌。
class ObtainAuthToken(APIView):
throttle_classes =()
permission_classes =()
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
def post(self, request):
serializer = AuthTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
Token.objects.filter(user=the_user).delete()
token, created = Token.objects.create(user=user)
return Response({'token': token.key})
這將始終無效以前的密鑰並生成一個新的密鑰。
非常感謝@ kevin-brown。偉大,清晰,徹底的答案。 – jacob