我使用django创建了一个配置文件页面,让用户可以更改我在唱歌形式中提供的信息。 (如姓名,电子邮件,密码)
我在密码字段上遇到两个问题:
1 - 当用户在文本字段中插入密码时,它以原始格式提交,我需要django用户的表格式
<algorithm>$<iterations>$<salt>$<hash>
我对个人资料页面的看法:
def user_profile(request):
current_user = request.user
form = UserProfileForm(request.POST or None, instance=current_user)
if request.POST:
if form.is_valid():
# pwd = form.cleaned_data['password']
# form_obj = form.save(commit=False)
# form_obj.password = make_password(pwd)
form.save()
message = "saved successfully"
return render(request, 'Profile.html', {'form':form, 'message':message}, context_instance=RequestContext(request))
return render_to_response('Profile.html', {
'form': form,
}, context_instance=RequestContext(request))
正如你在评论中看到的那样,我使用make_password函数来哈希密码并且它工作正常但是在提交页面之后,用户无法转到其他页面并需要重新登录...为什么?!
2 - 当个人资料页面显示给用户时,它填充了数据库中的当前信息,密码也采用上述格式(哈希) 如果用户提交表单,密码字段没有任何更改,则更改密码(它会发送哈希值并再次哈希!)
如何解决这个问题并在django中创建一个简单的工作资料页面? (我真的不喜欢它自己的管理面板!它看起来不太好!)
答案 0 :(得分:2)
来自文档:
如果启用了SessionAuthenticationMiddleware,更改用户密码将注销所有会话。
所以你必须使用update_session_auth_hash(request, user)
有关详细信息,请参阅https://docs.djangoproject.com/en/1.9/topics/auth/default/#session-invalidation-on-password-change
关于预先填充的密码字段:您应该将字段设置为passwordInput
,默认情况下,该字段未预先填充,请参阅https://docs.djangoproject.com/en/1.9/ref/forms/widgets/#django.forms.PasswordInput