Django rest knox set ttl на основе платформы - PullRequest
0 голосов
/ 21 мая 2018

Я использую django-rest-knox для аутентификации drf.Я успешно реализовал это, но теперь я хочу установить срок действия токена в зависимости от запрашивающей платформы.Если пользователь вошел в систему с мобильного телефона, я хочу, чтобы TTL отличался от входа в систему через Интернет.Как я мог сделать это.Я использую значение заголовка, чтобы различать платформы.

1 Ответ

0 голосов
/ 27 июля 2018

Вам нужно будет использовать наше собственное представление входа в систему, где создается токен.

Что-то подобное будет работать:

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

...