【问题标题】:Django:How password store in django auth_user tableDjango:密码如何存储在 django auth_user 表中
【发布时间】:2012-08-23 07:08:53
【问题描述】:

我正在自定义 django 用户模块并添加一些额外的字段

我的模型看起来像

class Drinker(models.Model):
    user = models.OneToOneField(User)
    birthday = models.DateField()
    name     = models.CharField(max_length = 100)

    def __unicode__(self):
        return self.name

这是我的注册视图

def DrinkerRegistration(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/profile/')
    if request.method == "POST":
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create(username = form.cleaned_data['username'],email = form.cleaned_data['email'],password = form.cleaned_data['password'])
            user.save()
            drinker = Drinker(name = form.cleaned_data['name'],birthday = form.cleaned_data['birthday'],user=user)
            drinker.save()
            return HttpResponseRedirect('/profile/')
    else:
        form = RegistrationForm()
        context = {'form':form}
        return render_to_response('register.html',context,context_instance = RequestContext(request))

现在我的问题是当用户在我的 auth_user 表中注册时,密码存储在计划文本中,即导致

Unknown password hashing algorithm '123'. Did you specify it in the PASSWORD_HASHERS setting?

登录时出错

但是对于超级用户的密码在 auth_user 表中是 SHA1 格式(我不确定)并且他们能够登录

请建议我如何在这里散列密码字段?

【问题讨论】:

  • 如果您尝试将合法输入直接存储在 Shell 中的 Drinker 模型中会发生什么?有用吗?

标签: python django


【解决方案1】:

不要使用User.objects.create(),使用User.objects.create_user() - 它会使用正确的算法对提供的密码进行哈希处理。

【讨论】:

  • 是的,谢谢,还有人认为我需要在我的设置中使用 PASSWORD_HASHERS
  • 不,只要您没有现有的用户数据库,其密码哈希算法与您的 Django 版本的默认值(当前版本 - 1.4 - 是 PBKDF2)不同。如果您只是创建新用户,则可以使用默认设置。
【解决方案2】:

您应该让 User.set_password 对密码进行哈希处理并将其存储为适当的格式,或者使用其他答案中提到的适当的管理器功能。

基本上,您从未要求 Django 对密码进行哈希处理,并尝试将纯文本放入您的数据库中。这样做时,没有满足 Django 预期的格式(哈希盐 hashed_pa​​ss),因此出现错误。

更好的是,您的应用程序的这些部分最好使用可重用的应用程序(例如 Django 注册)来完成。

然后,您可以在用户注册(创建)后使用信号创建饮酒者配置文件。

【讨论】:

    【解决方案3】:

    您需要使用create_user()帮助函数,它会正确设置密码。

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2015-06-26
      • 1970-01-01
      • 2017-08-18
      • 2023-03-04
      • 2020-12-01
      • 1970-01-01
      • 2018-09-04
      • 2020-10-07
      相关资源
      最近更新 更多