使用django创建个人资料页面

时间:2016-06-05 07:36:28

标签: python django hash change-password

我使用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中创建一个简单的工作资料页面? (我真的不喜欢它自己的管理面板!它看起来不太好!)

1 个答案:

答案 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