繁体   English   中英

django - 强制首次登录用户重置密码更改

[英]django - force first time login user to reset password change

我希望能够通过管理面板或通过我的应用程序创建一个新用户供用户使用。 当用户第一次登录时,用户将被重定向到密码重置页面以更改他们的密码。 成功更改密码后,他们将被重定向到主页。

为此,我的用户 model 中有一个名为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它必须在任何中间件将用户附加到请求之后 go 。 那可能是django.contrib.auth.middleware.AuthenticationMiddleware

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM