Аутентификация пользователя занимает много времени в DRF - PullRequest
0 голосов
/ 08 февраля 2019

Я использую ModelViewSet с классом разрешений IsAuthenticatedOrReadOnly, например:

class PostViewSet(viewsets.ModelViewSet, MarkdownToHTML):
    permission_classes = (IsAuthenticatedOrReadOnly,)

Когда я вызываю это представление в API с возможностью просмотра, данные возвращаются примерно через 1100 мс (ужеслишком долго), но когда я вызываю его из моего интерфейса, вызов занимает 6000-7000 мс!

Единственное различие между этими двумя методами вызова одного и того же представления заключается в том, что я передаю токен json из моего приложения пользовательского интерфейса.Когда я закомментирую заголовок токена, ответ возвращается примерно через 1 секунду, то же самое время, что и в API с возможностью просмотра.

Как этот простой шаг аутентификации может занять более 5 секунд?

Воткласс разрешения:

class IsAuthenticatedOrReadOnly(BasePermission):
    """
    The request is authenticated as a user, or is a read-only request.
    """

    def has_permission(self, request, view):
        return (
            request.method in SAFE_METHODS or
            request.user and
            request.user.is_authenticated
        )

1 Ответ

0 голосов
/ 08 февраля 2019

Я столкнулся с подобной проблемой в проекте.Я хотел бы рассказать вам о своем опыте, чтобы попытаться помочь, я не могу сказать, в чем именно ваша проблема, но я опубликую вещи, которые я проверял, когда у меня было.

Дело в том, что расшифровка аутентификациитокен является очень дорогой операцией, поэтому вы должны проверить:

  1. Сколько раз такой токен (если он предоставляется) декодируется в вашем представлении?
  2. Можно ли использовать куки для кэширования аутентификациитокен, устанавливающий время истечения?
  3. Сколько раз этот токен отправляется на сервер и обратно с сервера?

С другой стороны, помните, что DRF превратит вас в json в питонаобъект (в частности, словарь) в зависимости от длины вашего токена (и сколько раз он встречается) также будет очень дорогой операцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...