Почему Django добавляет 1 секунду к времени жизни cookie?

Я пытаюсь реализовать JWT-аутентификацию, используя django-graphql-jwt на бэкенде и nuxt3 на фронтенде. Мой токен и refresh_token хранятся в куках, и я обернул GraphQLView в декоратор jwt_cookie, который автоматически проверяет наличие jwt-токена в куке, а также его валидность. В общем, все работает отлично. Когда я отправляю запрос на авторизацию, бэкенд возвращает мне заголовки "Set-Cookie" для JWT и JWT_REFRESH_TOKEN с датой истечения срока действия, что автоматически удаляет их, как только они становятся недействительными, что экономит мне много кода/логики на фронтенде.

Однако есть один очень неприятный момент - Django зачем-то добавляет 1 секунду к времени жизни куки в функции set_cookie, и это все портит. Вот код Django:

    def set_cookie(
        self,
        key,
        value="",
        max_age=None,
        expires=None,
        path="/",
        domain=None,
        secure=False,
        httponly=False,
        samesite=None,
    ):
        self.cookies[key] = value
        if expires is not None:
            if isinstance(expires, datetime.datetime):
                if timezone.is_naive(expires):
                    expires = timezone.make_aware(expires, datetime.timezone.utc)
                delta = expires - datetime.datetime.now(tz=datetime.timezone.utc)
                # Add one second so the date matches exactly (a fraction of
                # time gets lost between converting to a timedelta and
                # then the date string).
                
                # Here's what I mean ↓↓↓
                delta += datetime.timedelta(seconds=1)


                # Just set max_age - the max_age logic will set expires.
                expires = None
                if max_age is not None:
                    raise ValueError("'expires' and 'max_age' can't be used together.")
                max_age = max(0, delta.days * 86400 + delta.seconds)
            else:
                self.cookies[key]["expires"] = expires
        else:
        ...

Я вижу комментарий от Django, но я все еще не понимаю, что он означает.

Возможно, это не критичная проблема, но я просто не могу понять, зачем они это сделали. В результате такого поведения в течение 1 секунды после истечения срока действия токена он все еще находится в куках пользователя, и это не кажется мне правильным. Я могу решить эту проблему, вычитая 1 секунду при создании cookies, но это кажется огромной занозой в заднице, и я хотел бы избежать непредсказуемых ошибок, которые могут возникнуть из-за этого нововведения.

Буду признателен за ваши ответы и объяснения :)

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