2012-05-10 178 views
5

Uno de los usuarios en mi sitio recientemente logró activar este rastreo al intentar iniciar sesión. En Django Admin, su contraseña dice Invalid password format or unknown hashing algorithm.Formato de contraseña no válido o algoritmo de hash desconocido

No tengo idea de qué pudo haber causado esto. Hasta ahora, este ha sido un caso aislado y yo y otros usuarios hemos logrado registrarnos exitosamente e iniciar sesión en el sitio.

Rastreo

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

¿Qué versión de Django está usando? Mi primera suposición es que la cadena de almacenamiento de la contraseña se ha dañado de alguna manera, ya que se almacena en un formato fijo. – jhonkola

+1

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

+0

@okm Hmm Creo que podría estar relacionado pero el hecho es que hasta ahora ha sido un caso aislado. Otros usuarios más nuevos han logrado registrarse e iniciar sesión con éxito después de este tipo ... ¿Alguna idea? – super9

Respuesta

0

Resulta que el usuario era un usuario invitado '. En mi código de invitación, que estaba creando el usuario con este bloque de código:

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

Como se puede ver, no estaba estableciendo una contraseña. La solución es aplicar una contraseña temporal ya que se le pedirá al usuario que cree una nueva contraseña una vez que llegue al enlace de validación que se le envió en el correo electrónico.

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

Así que, básicamente, recibirá este rastreo si se crea un objeto de usuario sin establecer una contraseña y tratar de iniciar sesión en su sitio (uso del sistema de autenticación de Django).

+3

-1 No, por dos razones: 1) Debe usar ['user.set_unusable_password()'] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth. models.User.set_unusable_password) como se menciona en [los documentos] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.set_unusable_password), 2) Establecer contraseña a 'random.randint (100000, 999999)' hace que sea extremadamente fácil de adivinar (tienes una probabilidad mayor de '1' a millón para adivinar la primera vez y solo necesitas menos de' 899999' para estar seguro de cuál es la contraseña es). No ir por ese camino. – Tadeck

+0

Cool gracias. No estaba al tanto de ese método. Irá esa ruta en su lugar. – super9

+1

+1 porque creo que debería recomendarse volver con su solución ... –

Cuestiones relacionadas