7

最近、私のサイトのユーザーの 1 人が、ログインしようとしたときにこのトレースバックをトリガーすることができました。Django Admin では、彼のパスワードはInvalid password format or unknown hashing algorithm.

何が原因なのかわかりません。これまでのところ、これは孤立したケースであり、私と他のユーザーはサイトへのサインアップとログインに成功しています.

トレースバック

Traceback (most recent call last):

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/var/git/bbox/userprofile/views.py", line 67, in login_view
   if form.is_valid():

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 124, in is_valid
   return self.is_bound and not bool(self.errors)

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 115, in _get_errors
   self.full_clean()

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 271, in full_clean
   self._clean_form()

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/forms/forms.py", line 299, in _clean_form
   self.cleaned_data = self.clean()

 File "/var/git/bbox/userprofile/forms.py", line 83, in clean
   self.user_cache = authenticate(username=username, password=password)

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 45, in authenticate
   user = backend.authenticate(**credentials)

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/contrib/auth/backends.py", line 15, in authenticate
   if user.check_password(password):

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/contrib/auth/models.py", line 304, in check_password
   return check_password(raw_password, self.password, setter)

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/contrib/auth/hashers.py", line 42, in check_password
   hasher = get_hasher(algorithm)

 File "/home/gituser/.virtualenvs/bbox/lib/python2.7/site-packages/django/contrib/auth/hashers.py", line 115, in get_hasher
   "setting?" % algorithm)

ValueError: Unknown password hashing algorithm ''. Did you specify it in the PASSWORD_HASHERS setting?
4

2 に答える 2

5

パスワードを空の文字列に設定する代わりに、モデルset_unusable_password()のメソッドをUser使用してパスワードを使用不可に設定します。

user.set_unusable_password()

ドキュメントで詳細を参照してください: https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.set_unusable_password

于 2012-05-11T03:04:31.557 に答える
0

ユーザーが「招待された」ユーザーであることが判明しました。私の招待コードでは、次のコード ブロックでユーザーを作成していました。

    user = User.objects.create(
            username=cd['email'],
            email=cd['email'],
            first_name=cd['first_name'],
            last_name=cd['last_name'],
            is_active=False)

ご覧のとおり、パスワードを設定していませんでした。ユーザーが電子メールで送信された検証リンクに到達すると、新しいパスワードを作成するように求められるため、修正は一時パスワードを適用することです。

    # set a random pw. user will be prompted to change
    # on log in
    user.set_unusable_password()
    user.save()

したがって、基本的に、パスワードを設定せずにユーザー オブジェクトを作成し、(django の認証システムを使用して) サイトにログインしようとすると、このトレースバックが返されます。

于 2012-05-11T02:36:07.613 に答える