Django在平台的基础上休息knox set ttl

时间:2018-05-21 07:57:27

标签: django django-rest-framework django-authentication

我正在使用django-rest-knox进行drf身份验证。我已经成功实现了它,但现在我想根据请求平台设置令牌到期。如果用户从移动设备登录,我希望在通过Web登录时拥有不同的TTL。我怎么能做到这一点。我使用标头值来区分平台。

1 个答案:

答案 0 :(得分:1)

您必须使用我们自己的登录视图,在该视图中创建令牌。

类似的方法会起作用:

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登录视图