【问题标题】:Django "set_password()" function not workingDjango“set_password()”函数不起作用
【发布时间】:2012-06-27 04:04:12
【问题描述】:

使用 Django 的“set_password()”函数更改站点上用户的密码后,密码将更改为加密字符串。但是,用户无法使用新密码或旧密码登录网站 - 之前输入的密码无效。这是获取密码的代码的 sn-p -

if request.POST:
  password = request.POST['password'].encode('ascii','replace')
  confirm_password = request.POST['confirm_password'].encode('ascii','replace')
  if password == confirm_password:
    user.set_password(confirm_password)
    user.save()
    return HttpResponseRedirect('/reset/thanks/')
  else:
    return HttpResponseRedirect('/reset/' + user.get_profile().forgotpasswordcode + "/" + user.email + "/")

即使帐户的密码已更改为与其相同的密码,加密的密码也会更改,用户无法登录。

有没有办法解决这个问题?谢谢。

【问题讨论】:

  • user 定义在哪里?
  • 为什么要编码为 ASCII?当 Django 将密码保存到数据库时,它会强制使用 unicode,所以实际上,密码 匹配,因为 ASCII 与 Unicode 中的相同(表面上)字符串是 not 相同的字符串。
  • User 在前面被定义为一个用户对象。这是一种尝试新事物的尝试——即使保留为 unicode,它也与新密码不匹配。

标签: python django passwords


【解决方案1】:

正确的方法是使用 django 内置的密码重置代替:

在 urls.py 中

from django.contrib.auth import views as auth_views

urlpatterns = patterns('',
    ### previous urls
    url(r'^password/reset/$',
       auth_views.password_reset,
       {'template_name': 'my_cool_app/registration/password_reset_form.html'},
       name='my_cool_app_password_reset'),
   url(r'^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
       auth_views.password_reset_confirm,
       {'template_name': 'my_cool_app/registration/password_reset_confirm.html'},
       name='my_cool_app_password_reset_confirm'),
   url(r'^password/reset/complete/$',
       auth_views.password_reset_complete,
       {'template_name': 'my_cool_app/registration/password_reset_complete.html'},
       name='my_cool_app_password_reset_complete'),
   url(r'^password/reset/done/$',
       auth_views.password_reset_done,
       {'template_name': 'my_cool_app/registration/password_reset_done.html'},
       name='my_cool_app_password_reset_done'),
    ### other urls
    )

您必须只创建模板,然后在需要的地方使用 url 名称来解析它们。

【讨论】:

    【解决方案2】:

    也许用户没有检查is_active 标志。这可能会导致尝试登录时出现异常行为,具体取决于实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 2021-03-31
      相关资源
      最近更新 更多