Dan*_*oza 1 python django django-models django-views django-users
在我的系统中,用户首先进入系统并且必须更改其密码.我有一个更改密码的视图,问题是当页面重新加载用户会话时丢失并强制用户再次登录.我不知道如何改变这种行为.我的代码概述
views.py
def change_password(request):
if request.method == 'POST':
data = request.body
change = json.loads(data)
id = change["id"]
password = change["password"]
user = get_object_or_404(CustomUser, pk=id)
user.set_password(password)
user.save()
return HttpResponse('success')
def login_success(request):
if request.user.groups.filter(name="group1").exists():
return redirect(group1)
elif request.user.groups.filter(name="group2").exists():
return redirect(group2)
elif request.user.groups.filter(name="group3").exists():
return redirect(group3)
else:
return redirect(group4)
Run Code Online (Sandbox Code Playgroud)
我正在使用CustomUser模型
models.py
class CustomUser(AbstractBaseUser, PermissionsMixin):
...
login = models.BooleanField(_('login'), default=False, blank=True)
...
Run Code Online (Sandbox Code Playgroud)
在我的模板中.
{% if user.login %}
<h1>Hi User</h1>
{% else %}
<form name="changePass" method="post">
</form>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我需要用户在更改密码后仍然保持登录状态,我在模板中做的是更改我的customuser中登录变量的状态.
我感谢任何答案或帮助,谢谢,对不起我的英语.
从版本1.7开始,Django引入了一项新功能,当您从用户更新密码时,该功能会使当前会话无效.您可以在此处查看更多相关信息:https://docs.djangoproject.com/en/dev/topics/auth/default/#session-invalidation-on-password-change
所有你必须做,以避免注销是调用该方法update_session_auth_hash从django.contrib.auth从文档的例子:
from django.contrib.auth import update_session_auth_hash
def password_change(request):
if request.method == 'POST':
form = PasswordChangeForm(user=request.user, data=request.POST)
if form.is_valid():
form.save()
update_session_auth_hash(request, form.user)
else:
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |