18

if ステートメントを設定して、現在のユーザーにパスワードが設定されているかどうかを確認します。何らかの理由で、それは機能しません。私が試してみました:

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

私は 2 つのユーザー アカウント (異なるブラウザーを開いています) を持っています。一方にはパスワードがあり、もう一方にはパスワードがありません。上記のステートメントを使用すると、両方のブラウザーで同じ表示が得られます。私は何を間違っていますか?

4

1 に答える 1

39

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 を返します。この動作は、そのようなパスワードを持つユーザーがパスワードのリセットを要求できないため、バグと見なされます。

于 2013-06-22T11:36:09.373 に答える