2012-05-10 18 views
5

Uno degli utenti del mio sito è riuscito di recente a attivare questo traceback durante il tentativo di accesso. In Admin Django, la sua password legge Invalid password format or unknown hashing algorithm.Formato password errato o algoritmo di hashing sconosciuto

Non ho idea di cosa potrebbe aver causato questo. Finora questo è stato un caso isolato e io e altri utenti siamo riusciti a registrarci e ad accedere al sito con successo.

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

Quale versione di Django stai usando? La mia prima ipotesi è che la stringa di memorizzazione della password sia stata danneggiata in qualche modo, poiché è archiviata in un formato fisso. – jhonkola

+1

possibilmente duplicato w/http://stackoverflow.com/questions/10246463/password-hashers-setting-in-django/10246947#10246947 – okm

+0

@okmò Hmm penso che potrebbe essere correlato ma il fatto è che è stato finora un caso isolato. Altri utenti più recenti sono riusciti a registrarsi e ad accedere con successo dopo questo ragazzo .. Qualche idea? – super9

risposta

0

'venuto fuori che l'utente fosse un utente 'invitato'. Nel mio codice di invito, stavo creando l'utente con questo blocco di codice:

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

Come potete vedere, non stavo impostando una password. La correzione consiste nell'applicare una password temporanea poiché all'utente verrà chiesto di creare una nuova password una volta che avrà raggiunto il link di convalida inviato a lui nell'e-mail.

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

Quindi, fondamentalmente, si otterrà questo traceback se si crea un oggetto utente senza impostare una password e tenta di lui accedere al vostro sito (utilizzando il sistema di autenticazione di Django).

+3

-1 No, per due motivi: 1) È necessario utilizzare ['user.set_unusable_password()'] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth. models.User.set_unusable_password) come menzionato da [i documenti] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.set_unusable_password), 2) Impostazione password a 'random.randint (100000, 999999)' lo rende estremamente facile da indovinare (hai una probabilità superiore a '1' a milioni da indovinare la prima volta e hai solo bisogno di meno di' 899999' tentativi per essere sicuro di quale sia la password è). Non andare in quel modo. – Tadeck

+0

Cool grazie. Non ero a conoscenza di quel metodo. Verrà invece quella rotta. – super9

+1

+1 perché penso che tornare con la tua soluzione dovrebbe essere incoraggiato ... –

Problemi correlati