【发布时间】:2019-04-07 02:31:35
【问题描述】:
我正在实现一个强制用户更改密码的功能(即,如果管理员创建了初始密码,则用户需要在下次登录时更改它)。我正在使用 Django Contrib Auth 包。
为此,我通过布尔参数 force_password_change 扩展了用户配置文件:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
force_password_change = models.BooleanField(default=True)
在我看来,我正在扩展标准LoginView:
class MyLoginView(LoginView):
def form_valid(self, form):
# form is valid (= correct password), now check if user requires to set own password
if form.get_user().profile.force_password_change:
return HttpResponseRedirect('password_change')
else:
auth_login(self.request, form.get_user())
return HttpResponseRedirect(self.get_success_url())
点击login按钮后系统出现404 page not found错误:The current path, accounts/login/, didn't match any of these.
我注意到,当我在 HttpResponseRedirect('password_change') 之前添加 auth_login(self.request, form.get_user()) 时,它可以正常工作。但这也意味着用户(错误地)通过了身份验证。
urls.py:
path('', myapp.MyLoginView.as_view(), name='login'),
path('password_change/', myapp.MyPasswordChangeView.as_view(), name='password_change'),
为什么会出现这种情况,为什么 404 错误引用 accounts/login/?
【问题讨论】:
-
我面临着和你一样的问题。如果可能的话,您能否分享完整密码重置的代码?。
-
@DevKing 你好,你是怎么解决这个问题的?
标签: django django-views django-urls