Python Django Rest基于身份验证查询的身份验证令牌重启
我正在构建一个django应用程序,我遇到了以下问题。令牌有一个到期时间,我想创建一个api端点,如果访问该端点,将刷新用户令牌的可用性 由于我处理应用程序其余部分的方式,我需要使用基于查询的身份验证。我的实施如下: 在my authentication.py中: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
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
的代码。