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

Вернуться на верх