Django rest knox 基于平台设置ttl
Django rest knox set ttl on basis of platform
我正在使用 django-rest-knox 进行 drf 身份验证。我已经成功实施了它,但现在我想根据请求平台设置令牌过期时间。如果用户是从移动设备登录的,我希望拥有与通过网络登录不同的 TTL。我怎么能做到这一点。我使用 header 值来区分平台。
您必须在创建令牌时使用我们自己的登录视图。
类似的东西会起作用:
class MyLoginView(APIView):
authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
permission_classes = (IsAuthenticated,)
def post(self, request, format=None):
if <check if request header for mobile exist>:
token = AuthToken.objects.create(request.user, expires=datetime.timedelta(days=1))
else:
# default TTL otherwise
token = AuthToken.objects.create(request.user)
user_logged_in.send(sender=request.user.__class__, request=request, user=request.user)
UserSerializer = knox_settings.USER_SERIALIZER
context = {'request': self.request, 'format': self.format_kwarg, 'view': self}
return Response({
'user': UserSerializer(request.user, context=context).data,
'token': token,
})
最后指向这个登录视图 url 而不是原来的 django-rest-knox 登录视图
我正在使用 django-rest-knox 进行 drf 身份验证。我已经成功实施了它,但现在我想根据请求平台设置令牌过期时间。如果用户是从移动设备登录的,我希望拥有与通过网络登录不同的 TTL。我怎么能做到这一点。我使用 header 值来区分平台。
您必须在创建令牌时使用我们自己的登录视图。
类似的东西会起作用:
class MyLoginView(APIView):
authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
permission_classes = (IsAuthenticated,)
def post(self, request, format=None):
if <check if request header for mobile exist>:
token = AuthToken.objects.create(request.user, expires=datetime.timedelta(days=1))
else:
# default TTL otherwise
token = AuthToken.objects.create(request.user)
user_logged_in.send(sender=request.user.__class__, request=request, user=request.user)
UserSerializer = knox_settings.USER_SERIALIZER
context = {'request': self.request, 'format': self.format_kwarg, 'view': self}
return Response({
'user': UserSerializer(request.user, context=context).data,
'token': token,
})
最后指向这个登录视图 url 而不是原来的 django-rest-knox 登录视图