Django rest knox - получение времени истечения срока действия токена из запроса

Я использую django-rest-knox для аутентификации пользователей. Токен хранится в cookie, и я использую пользовательское промежуточное ПО для его получения. Кроме того, это промежуточное ПО устанавливает cookie при каждом запросе, чтобы время истечения срока действия cookie обновлялось.

Django rest knox, имеет метод для обновления времени истечения токена (renew_token), и я хочу обновить мой cookie, если это поле изменилось.

Я попытался адаптировать код следующим образом: `class KnoxTokenAuthenticationMiddleware:

def _update_cookie(self, request, response):
    response.set_cookie(
        settings.KNOX_COOKIE_NAME,
        request.COOKIES[settings.KNOX_COOKIE_NAME],
        domain=settings.KNOX_COOKIE_DOMAIN,
        httponly=settings.KNOX_COOKIE_HTTPONLY,
        secure=settings.KNOX_COOKIE_SECURE,
        samesite=settings.KNOX_COOKIE_SAMESITE,
        max_age=settings.KNOX_COOKIE_MAX_AGE,
        path=settings.KNOX_COOKIE_PATH,
    )
    return response

def __init__(self, get_response):
    # One-time configuration and initialization.
    self.get_response = get_response

def __call__(self, request):

    if settings.KNOX_COOKIE_NAME in request.COOKIES:
        request.Authorization = 'Token {}'.format(request.COOKIES[settings.KNOX_COOKIE_NAME])
        response = self.get_response(request)
        try:
            current_expiry = request.auth.expiry
            new_expiry = timezone.now() + settings.REST_KNOX.get('TOKEN_TTL')
            delta = (new_expiry - current_expiry).total_seconds()
            logging.basicConfig(level=logging.DEBUG)
            logging.debug('current expiry: {}'.format(current_expiry))
            logging.debug('new expiry: {}'.format(new_expiry))
            logging.debug('delta: {}'.format(delta))
            logging.debug('refresh interval: {}'.format(settings.REST_KNOX.get('MIN_REFRESH_INTERVAL')))
            if delta > settings.REST_KNOX.get('MIN_REFRESH_INTERVAL'):
                logging.basicConfig(level=logging.DEBUG)
                logging.debug('update cookie')
                response = self._update_cookie(request, response)
        except Exception as e:
            logging.basicConfig(level=logging.DEBUG)
            logging.debug(e)
    else:
        response = self.get_response(request)

    return response`

Проблема в том, что время истечения request.auth.expiry не совпадает со временем истечения, отображаемым в базе данных: expiry time from middleware время истечения из базы данных

Как я могу получить время истечения срока действия, отображаемое в базе данных без необходимости делать запрос?

Заранее спасибо и извините, если вопрос написан неправильно. Я здесь впервые :)

Вернуться на верх