jac*_*cob 7 django-rest-framework
我想在每次用户登录时撤销先前令牌.这意味着生成新令牌(或者至少更改现有模型实体的密钥).这听起来很简单,但在DRF文档中,我没有看到任何提及这种情况.文档似乎假设令牌始终保持不变.这只是一个简单的案例,还是我错过了什么?我的问题是:每次用户登录时更改令牌是否有问题?
Kev*_*own 17
该TokenAuthentication由Django的REST框架提供旨在用于简单的情况下,该令牌从来没有需要改变,而且只有一个令牌的用户.
文档似乎假设令牌始终保持不变.
这是对的.任何额外的东西都必须独立实施.
我想在每次用户登录时撤销先前的令牌.
您可以通过删除登录用户的任何令牌在身份验证视图中执行此操作.
from rest_framework.authtoken.models import Token
Token.objects.filter(user=the_user).delete()
Run Code Online (Sandbox Code Playgroud)
如果您使用为令牌身份验证提供的视图,则需要将它们子类化以始终为用户获取新令牌.
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})
Run Code Online (Sandbox Code Playgroud)
这将始终使先前的密钥无效并生成新密钥.
| 归档时间: |
|
| 查看次数: |
2336 次 |
| 最近记录: |