DjangoAapp продолжает выходить из системы для стандартного пользователя и администратора (персонала) - проблема с cookies
Имею рабочее приложение Django в продакшене, есть несколько проблем, которые возникают при входе в систему, переходе на сайты, предназначенные только для сотрудников (с использованием декораторов) и т.д.
- При входе в систему мне иногда нужно сделать это 2, 3 или более раз, просто повторять имя пользователя и пароль, чтобы пользователь мог попасть на портал (ошибка не возникает) .
- При входе в систему под именем "staff", имея некоторые сайты на портале, которые ограничены, часто он просит ввести пароль еще раз (и показывает стандартную страницу входа в систему администратора Django, хотя все еще работает над приложением) - как будто веб-браузер не помнит, что "staff" уже вошел .
- Когда уже повторно вошел в систему как персонал (пункт выше), продолжая выполнять некоторые действия на странице, например, добавлять посты, при нажатии кнопки "post" снова запрашивает пароль (примечание, я создал страницу администратора на сайте, для добавления постов, управления пользователями и т.д.)
Я подозреваю, что это связано либо с:
- Настройка моих Cookie
- Используемые декораторы, ограничивающие доступ только для вошедших в систему пользователей или персонала
Благодарю за помощь!
settings.py
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_COOKIE_AGE = 24*60*60*7 #1 week
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_NAME = 'www.mywebsite.com'
CSRF_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 86400 # 1 day
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_SSL_REDIRECT = True
SECRET_KEY = os.getenv("SECRET_KEY") #from .env file
Пример, в котором сотрудники могут получить доступ только с помощью decoratror views.py
@staff_member_required
@login_required
def newsletter(request):
users = User.objects.all()
# end the rest of the code
Ранее я также использовал нижеприведенный вариант, но он не имел никакого значения:
@staff_member_required(login_url='home')
Вот decorators.py, который я недавно добавил, но не уверен, что это нормально или просто общее - не уверен, нужно ли это вообще. Должен ли я добавить это в decorators.py или удалить его и использовать @staff_member_required по умолчанию как есть:
def staff_member_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,
login_url='admin:login'):
"""
Decorator for views that checks that the user is logged in and is a staff
member, redirecting to the login page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_active and u.is_staff,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if view_func:
return actual_decorator(view_func)
return actual_decorator