Django - заставить пользователя, впервые вошедшего в систему, сбросить изменение пароля
Я хочу иметь возможность создавать нового пользователя через панель администратора или через мое приложение для использования пользователем. Когда пользователь входит в систему в первый раз, он будет перенаправлен на страницу сброса пароля для изменения пароля. После успешного изменения пароля пользователь будет перенаправлен на главную страницу.
Для этого у меня есть поле в модели User под названием is_1st_login
, которое принимает значения 'Y'
(по умолчанию) и 'N'
. Поэтому все, что мне нужно сделать, это написать, как показано ниже:
def login_view(request):
form = LoginForm(request.POST or None)
msg = None
if request.method == "POST":
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(username=username, password=password)
if user is not None and (user.has_perm('authentication.can_access_web') or user.is_superuser):
login(request, user)
# redirect 1st time user login to reset password
if user.is_1st_login == 'Y':
return redirect('user_password_change')
return redirect("/")
else:
msg = 'Invalid credentials'
else:
msg = 'Error validating the form'
return render(request, "account/login2.html", {"form": form, "msg" : msg})`
После сброса пароля я обновлю поле до 'N'
. Пока все это работает как ожидалось, как мне ограничить пользователя от попыток обойти это через изменение url на правильный путь без изменения пароля?
Мое приложение большое, в нем много приложений, и я думал использовать промежуточное ПО или декоратор, но это потребует от меня применения его ко многим функциям в бэкенде. Есть ли способ предотвратить попытки пользователя подменить URL, чтобы пропустить процесс сброса пароля, например, путем установки промежуточного ПО, которое автоматически применяется ко всей системе?
Я пытался найти сторонние библиотеки или пакеты, которые подходят для моих нужд, но не нашел ни одной. Я пробовал использовать промежуточное ПО, но, насколько я понимаю, промежуточное ПО должно применяться индивидуально.
Промежуточное ПО применяется ко всему, что проходит через сервер, поэтому вам нужно только написать его и добавить в стек промежуточного ПО в settings.py
для сайта. Так как вы будете обращаться к request.user
, он должен будет обращаться к тому промежуточному ПО, которое прикрепляет пользователя к запросу. Это, вероятно, django.contrib.auth.middleware.AuthenticationMiddleware