我正在构建一个django应用程序,我遇到了以下问题。令牌有一个到期时间,我想创建一个api端点,如果访问该端点刷新用户令牌可用性。
由于我处理应用程序其余部分的性质,我需要使用基于查询的身份验证。我实现了如下:
在我的authentication.py中:
from rest_framework.authentication import TokenAuthentication
class QueryStringBasedTokenAuthentication(TokenAuthentication):
def authenticate(self, request):
key = request.query_params.get('auth_token').strip()
if key:
return self.authenticate_credentials(key)
else:
return super(QueryStringBasedTokenAuthentication, self).authenticate(request)
我已相应更新了设置:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'authsys.auth.QueryStringBasedTokenAuthentication',
)
}
现在我看到了一些关于如何使用标准标头令牌实现我想要的问题。如何使用基于查询的身份验证?
提前致谢! 卢卡斯
编辑:
这是我到目前为止所做的,但我有一个错误,即访问该网址时不允许GET。 POST方法只给我一个500错误。
class RefreshAuthToken(ObtainAuthToken):
def post(self, request):
key = request.query_params.get('auth_token').strip()
try:
token = self.model.objects.get(key=key)
token.delete()
token = Token.objects.create(user=serializer.object['user'])
token.created = datetime.datetime.utcnow().replace(tzinfo=utc)
token.save()
return Response({'token': token.key})
except self.model.DoesNotExist:
return Response("myError", status=status.HTTP_400_BAD_REQUEST)