Django сбрасывает права доступа пользователей
Я создаю сайт, используя React для фронтенда и Django для бэкенда. Страница входа отправляет запрос к этой функции представления при нажатии кнопки входа.
@api_view(['POST'])
def api_authenticate_login_view(request):
body = request.data
username = body['username']
password = body['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
content = {"authenticated": True}
return Response(content)
else:
content = {"authenticated": False}
return Response(content)
При попытке доступа к любой другой странице сайта сначала отправляется запрос к этой функции представления, чтобы убедиться, что пользователь вошел в систему
@api_view(['GET'])
def api_is_authenticated_view(request):
if request.user.is_authenticated:
content = {"authenticated": True}
return Response(content)
else:
content = {"authenticated": False}
return Response(content)
Если возвращается false, они перенаправляются на страницу входа в систему.
Проблема в том, что это отлично работает для большинства наших пользователей, но для некоторых из них постоянно сбрасываются их права доступа на странице администратора Django. Я имею в виду, что в разделе пользователя на странице администратора Django вы можете выбрать пользователя и посмотреть его разрешения. На нашей странице это показывает галочку рядом с тегами Active, Staff status, Superuser и другими (см. изображение по ссылке ниже)
Разрешения пользователя Django
Для некоторых пользователей эти флажки не отмечены, что означает, что они не могут войти в систему, так как пользователь неактивен. Также пользователь будет возвращаться как None в функции api_authenticate_login_view.
Это должно быть так же просто исправить, как зайти и установить флажки, чтобы дать им доступ. Однако, когда я это делаю, они успешно входят в систему, но когда они пытаются получить доступ к главной странице сразу после этого, проверка подлинности через функцию api_is_authenticated_view возвращает false.
Я обнаружил, что происходит то, что как только они входят в систему, их права Django немедленно сбрасываются путем снятия меток статуса Active и Staff.
Нет никакой разницы между этими пользователями и другими пользователями, для которых это работает. Я пробовал делать их суперпользователями, перезапускать сервер Django, пробовал разные браузеры, проверял, что они не делают ничего другого с cookies, все безрезультатно. Неважно, сколько раз я устанавливал для них статус Active и давал им статус Staff, как только они пытаются войти в систему, их сбрасывает. Я не могу найти ничего в Интернете, чтобы помочь мне выяснить, почему это происходит.
Вот что мы имеем для бэкенда аутентификации и промежуточного программного обеспечения в settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
]
AUTHENTICATION_BACKENDS = [
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
]
Большое спасибо за ваше время и помощь.