2012-05-10 1 views
5

Un des utilisateurs de mon site a récemment réussi à déclencher ce retraçage en essayant de se connecter. Dans Django Admin, son mot de passe est Invalid password format or unknown hashing algorithm.Format de mot de passe invalide ou algorithme de hachage inconnu

Je n'ai aucune idée de ce qui a pu causer cela. Jusqu'à présent, cela a été un cas isolé et moi et d'autres utilisateurs ont réussi à s'inscrire et à se connecter au site.

Traceback

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? 
+0

Quelle version de Django utilisez-vous? Ma première supposition est que la chaîne de stockage de mot de passe a été corrompue en quelque sorte, car il est stocké dans un format fixe. – jhonkola

+1

peut-être dupliqué w/http://stackoverflow.com/questions/10246463/password-hashers-setting-in-django/10246947#10246947 – okm

+0

@okm Hmm Je pense que cela pourrait être lié, mais la chose est, c'est si loin été un cas isolé. D'autres utilisateurs plus récents ont réussi à s'inscrire et se connecter avec succès après ce gars .. Des idées? – super9

Répondre

0

Transforme le utilisateur est un utilisateur 'invité'. Dans mon code d'invitation, je créais l'utilisateur avec ce bloc de code:

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

Comme vous pouvez le voir, je ne déclenchaient pas un mot de passe. La solution est d'appliquer un mot de passe temporaire car l'utilisateur sera invité à créer un nouveau mot de passe lorsqu'il aura atteint le lien de validation qui lui a été envoyé dans l'e-mail.

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

Donc, fondamentalement, vous obtiendrez ce retraçage si vous créez un objet utilisateur sans définir un mot de passe et essayez de le connecter à votre site (en utilisant le système auth django).

+3

-1 Non, pour deux raisons: 1) Vous devez utiliser ['user.set_unusable_password()'] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth. models.User.set_unusable_password) tel que mentionné par [les docs] (https://docs.djangoproject.com/fr/dev/topics/auth/#django.contrib.auth.models.User.set_unusable_password), 2) Définition du mot de passe 'random.randint (100000, 999999)' le rend extrêmement facile à deviner (vous avez une chance supérieure à '1' à million de deviner la première fois et vous avez seulement besoin de moins de' 899999' tentatives pour être sûr de ce que le mot de passe est). Ne va pas comme ça. – Tadeck

+0

Merci beaucoup. N'était pas au courant de cette méthode. Va aller cette route à la place. – super9

+1

+1 parce que je pense que revenir avec votre solution devrait être encouragé ... –

Questions connexes