【问题标题】:Checking if a Django user has a password set检查 Django 用户是否设置了密码
【发布时间】:2013-06-22 11:27:13
【问题描述】:

我设置 if 语句来查看当前用户是否设置了密码。出于某种原因,它只是行不通。我试过了:

{% if not user.password %}
{% if user.password == None %}
{% if user.password is None %}

我有 2 个用户帐户(打开不同的浏览器),一个有密码,一个没有密码。当我使用上面的语句时,我在两个浏览器中都得到了相同的显示。我做错了什么?

【问题讨论】:

  • 如果您使用{{user.password}},它是否可以在浏览器中正确打印?此外,您可能想要{{request.user.password}} - 您是否从上下文中发送user 对象?
  • 是的,它会打印出密码。我不打算这样做。我想我现在已经从 falsetru 中找到了解决方案 :)

标签: python django django-users


【解决方案1】:

使用user.has_usable_password

>>> a = User.objects.create_user('user1', 'user1@example.com')
>>> b = User.objects.create_user('user2', 'user2@example.com', password='secret')
>>> a.has_usable_password()
False
>>> b.has_usable_password()
True

更新

根据文档,has_usable_password 的行为发生了变化。

在 Django 2.1 中更改:

在旧版本中,如果密码为 None 或空字符串,或者密码使用不在 PASSWORD_HASHERS 设置中的哈希,这也会返回 False。这种行为被认为是一个错误,因为它会阻止具​​有此类密码的用户请求重置密码。

【讨论】:

  • has_usable_password() 在 Django 2.1 中已更改:如果密码为 None 或空字符串,则不再返回 False。所以我想你现在还想测试是否设置了 user.password
  • @doeke,感谢您提供的信息。我从 django 文档中添加了注释。但我没有更改答案中的代码。请建议编辑,我稍后会审查它。谢谢。
  • 在我的项目中,我只是将其更改为a.password and a.has_usable_password()
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 2014-07-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2022-11-27
相关资源
最近更新 更多