Python Django Rest基于身份验证查询的身份验证令牌重启

Python Django Rest基于身份验证查询的身份验证令牌重启,python,django,django-rest-framework,django-rest-auth,Python,Django,Django Rest Framework,Django Rest Auth,我正在构建一个django应用程序,我遇到了以下问题。令牌有一个到期时间,我想创建一个api端点,如果访问该端点,将刷新用户令牌的可用性 由于我处理应用程序其余部分的方式,我需要使用基于查询的身份验证。我的实施如下: 在my authentication.py中: from rest_framework.authentication import TokenAuthentication class QueryStringBasedTokenAuthentication(TokenAuthent

我正在构建一个django应用程序,我遇到了以下问题。令牌有一个到期时间,我想创建一个api端点,如果访问该端点,将刷新用户令牌的可用性

由于我处理应用程序其余部分的方式,我需要使用基于查询的身份验证。我的实施如下:

在my 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',
    )
}
现在,我看到了一些关于如何使用标准头标记实现我想要的东西的问题。使用基于查询的身份验证,我将如何做到这一点

提前谢谢! 卢卡斯

编辑:

这是我到目前为止所做的,但我有一个错误,访问该url时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)

您是说刷新基于查询的令牌到期吗?最好的做法是刷新令牌本身,而不是更改到期时间。是的,我想刷新令牌本身。但我仍然没有弄明白。有什么想法吗?所以这种情况下的最佳实践是在命中api时生成一个新令牌,并在响应的头中返回它,然后在客户端使用新令牌。刷新令牌到期时间不是一个好主意。刷新令牌本身。嘿,Swapnil,谢谢你的提示!事实上,到目前为止我就是这么想的。我仍在与这项任务作斗争,但要达到目标!在编辑我的问题时发布了我的代码。
GET
是不允许的,因为您只在其中编写了
post
方法。关于
500
错误,我需要堆栈跟踪。并粘贴
获取的AuthToken
的代码。您是说刷新基于查询的令牌到期吗?最好的做法是刷新令牌本身,而不是更改到期时间。是的,我想刷新令牌本身。但我仍然没有弄明白。有什么想法吗?所以这种情况下的最佳实践是在命中api时生成一个新令牌,并在响应的头中返回它,然后在客户端使用新令牌。刷新令牌到期时间不是一个好主意。刷新令牌本身。嘿,Swapnil,谢谢你的提示!事实上,到目前为止我就是这么想的。我仍在与这项任务作斗争,但要达到目标!在编辑我的问题时发布了我的代码。
GET
是不允许的,因为您只在其中编写了
post
方法。关于
500
错误,我需要堆栈跟踪。还可以粘贴
获取AuthToken
的代码。