Django APIView для выхода из сеанса пользователя - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть модуль Django, который вызывается из службы единого входа.Служба имеет единую функцию выхода из системы, которая делает один GET запрос на URL-адрес, данный ему во время входа в систему.

Я пытаюсь настроить APIView в Django для обработки этого выхода.Служба происхождения никогда не проверяет ответ;он только один раз вызывает GET URL.

Я пытаюсь что-то подобное для APIView, но продолжаю получать session.DoesNotExist исключения:

class LogoutApi(APIView):

    def get(self, request, *args, **kwargs):
        s = Session.objects.get(session_key=kwargs.get('sk', ''))
        s.delete()
        return Response({'result': True})

Я знаю, что у меня естьдопустимый сеанс, но даже когда я пытаюсь выполнить итерацию по Session.objects, я не могу его найти.

Я также пытался извлечь ключ из SessionStore:

class LogoutApi(APIView):

    def get(self, request, *args, **kwargs):
        sk = request.GET.get('sk', '')
        try:
            s = SessionStore(sk)
            del s[sk]
            return Response({'result': True})
        except:
            self.logger.error(sys.exc_info()[0])
        return Response({'result': False})

Это все еще не былоне успешноЕсть ли способ настроить вызов API GET для завершения определенного сеанса?

1 Ответ

0 голосов
/ 18 декабря 2018

Оказывается, проблема заключалась в том, что механизм сеанса был настроен на использование подписанных файлов cookie.После того, как я удалил следующую строку из моей конфигурации, все заработало как положено:

SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies" # Removed this line

Для справки, это код выхода из системы, который работал с вышеуказанным параметром:

class LogoutApi(APIView):

    def get(self, request, *args, **kwargs):

        sk = request.GET.get('sk', '')
        if sk:
            s = SessionStore(session_key=sk)
            s.delete()
            return Response({'result': True})
        return Response({'result': False})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...