всплывающее окно безопасности сеанса django при каждой загрузке страницы - PullRequest
0 голосов
/ 19 сентября 2018

Я установил django-session-security 2.6.1 на Django 1.9 для выхода из системы неактивных пользователей через два часа.У меня есть следующее в моих настройках:

   INSTALLED_APPS = (
    ...
        'session_security',
    ...
    ]
    MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'intro.middleware.director.SiteDirector',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'session_security.middleware.SessionSecurityMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'reversion.middleware.RevisionMiddleware',
    'intro.middleware.persistfilter.FilterPersistMiddleware',
    'content.middleware.content.ContentMiddleware',
    'intro.middleware.booking.BookingMiddleware',
    'common.middleware.accounts.PasswordChangeMiddleware'
)

    # session security
    SESSION_SECURITY_WARN_AFTER = 6900
    SESSION_SECURITY_EXPIRE_AFTER = 7200
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True
    ...

и в base.html в <head>

<script src="{% static "suit/js/jquery-1.8.3.min.js" %}"></script>
{% include 'session_security/all.html' %}

Для каждой загрузки страницы на сайте, если прошло 10 секунд или болееследующее всплывающее окно появляется при переходе на другую страницу в том же домене enter image description here Это не только в Firefox, но и в Chrome.Поиск других людей с похожими проблемами не дает полезных результатов, но показывает, что проблема вызвана командой javascript onbeforeunload :

У меня есть другой проект Django 1.6.1 и django-session-безопасность 2.2.4.Единственное различие, которое я вижу, состоит в том, что в Django 1.9 у меня должен быть SESSION_EXPIRE_AT_BROWSER_CLOSE = True, или django вылетает при любой перезагрузке страницы, где в Django 1.6.1 это вообще не установлено.Может ли быть какая-то проблема с моей версией jquery?Буду признателен за любые решения.

Просто добавлю, что если я возьму

{% include 'session_security/all.html' %}

из base.html, я больше не получу всплывающие окна, но предупреждение не отображается.Пользователь все еще выходит из системы, хотя.Еще одно примечание, у меня есть

url(r'session_security/', include('session_security.urls')),

в urls.py.

ОБНОВЛЕНИЕ Существует некоторая несовместимость с django-smart-select-ами, и в частности

(function($) {
            var chainfield = "#id_supplier";
            var url = "/chaining/filter/money/Item/supplier/intro/BookingItem/item";
            var id = "#id_item";
            var value = undefined;
            var auto_choose = true;
            var empty_label = "---------";

            $(document).ready(function() {
                chainedfk.init(chainfield, url, id, value, empty_label, auto_choose);
            });
        })(jQuery || django.jQuery);

Это, похоже, вставлено в мой шаблон из smart_selects / static / smart-selects / admin / js / chainedfk.js

Я могу только догадываться, что jQuery || django.jQuery означает переменную jQuery ИЛИ django.jQuery, в зависимости от того, какой из них установлен, и который передается в функцию, которая затем ... ну, тогда я теряюсь в отношении того, для чего используется этот параметр или где он используется.

Я попытался указатьjQuery, который должен использовать умный выбор, но это не имеет значения.Похоже, я должен реализовать свой собственный вызов ajax select update.

1 Ответ

0 голосов
/ 03 октября 2018

DSS не перенаправляет страницу с формой, чтобы не потерять данные формы.Есть обработчик confirmFormDiscard, который вы можете переопределить, чтобы исправить это.Существует некоторое обсуждение в выпуске № 39 в репо, но предлагаемое исправление выглядит так:

{% include 'session_security/all.html' %}
<script>
   sessionSecurity.confirmFormDiscard = undefined;
</script>

Это также упоминается в FAQ .

...