2012-01-21 10 views
24

Así que acabo de instalar mi primera aplicación django.ValueError: Demasiados valores para descomprimir Django

Hice un syncdb y creé mi cuenta de superusuario para el sitio.

Ahora cuando accedo a la página y presiono el botón de inicio de sesión obtengo este error. Creo que tiene algo que ver con la contraseña, pero no estoy seguro.

ValueError at /accounts/login/ 
too many values to unpack 

estoy usando la vista de inicio de sesión genérica

(r'^accounts/login/$', login, {'template_name': 'authentication/login.html'}), 

El siguiente es el rastreo

Environment: 


Request Method: POST 
Request URL: http://xx.xx.xx.xx:8888/accounts/login/?next=/some_page/ 

Django Version: 1.3.1 
Python Version: 2.7.2 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'bc_system_app', 
'django.contrib.humanize'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.middleware.csrf.CsrfResponseMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    79.   response = view_func(request, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/views.py" in login 
    35.   if form.is_valid(): 
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in is_valid 
    121.   return self.is_bound and not bool(self.errors) 
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _get_errors 
    112.    self.full_clean() 
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean 
    268.   self._clean_form() 
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in _clean_form 
    296.    self.cleaned_data = self.clean() 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/forms.py" in clean 
    85.    self.user_cache = authenticate(username=username, password=password) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py" in authenticate 
    55.    user = backend.authenticate(**credentials) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/backends.py" in authenticate 
    18.    if user.check_password(password): 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/models.py" in check_password 
    275.   return check_password(raw_password, self.password) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/models.py" in check_password 
    42.  algo, salt, hsh = enc_password.split('$') 

Exception Type: ValueError at /accounts/login/ 
Exception Value: too many values to unpack 

Respuesta

11

Sí, hay un problema en la contraseña.

El error está en la forma en que la contraseña se ha cifrado y almacenado en la base de datos. Se puede ver claramente a partir de la declaración algo, salt, hsh = enc_password.split('$') en la trazabilidad. La división de contraseñas encriptadas devuelve más de 3 valores.

Por lo tanto, consulte los esquemas de cifrado de contraseñas y relacionados.

+0

¿Por qué es así? Acabo de hacer un 'syncdb' y creo un usuario cuando se lo solicite. También miré el psh hash, hay 3 '$' ... así que eso se dividiría en 4 ... –

+0

Descubrí cuál es el problema. Rompí la clave secreta cuando estaba jugando con la configuración. gracias –

+0

Extraño. Obtengo exactamente la misma excepción. Cambié mi clave secreta, pero sigo teniendo el mismo error. – Burak

0

Tuve un problema similar. La contraseña para mi superusuario estaba corrupta de alguna manera. Puede verificar esto examinando la tabla auth_user en su base de datos. Su contraseña debe ser algo así como "" sha1 $ 263a7 $ c17f83f1d1902fb7bd527d00ffcb22f4dc97a978 ". Si tiene más de (o menos de) dos símbolos" $ ", obtendrá un error similar. La razón para esto, como mencionó Sandip, es porque el siguiente función de espera tres valores a devolver:.

algo, salt, hsh = enc_password.split('$')

Tener ese extra "$" símbolo en la contraseña volvería cuatro valores y hacer que los "demasiados valores para desempaquetar" que aparezca el mensaje de error

La solución para mí fue crear un nuevo superusuario mediante el uso del comando createsuperuser en el script manage.py. Se puede crear más información sobre cómo crear un superusuario. d aquí:

https://docs.djangoproject.com/en/dev/topics/auth/

todavía no estoy seguro de por qué mi contraseña ha sido dañado.

+1

¿Estaba usando Django 1.4 alpha? Eche un vistazo a mi respuesta. –

+0

También tuve este problema. Empecé con Django 1.4 y luego volví a 1.3 para mantener la compatibilidad con Grappelli. Creé mi superusuario cuando instalé 1.4 y el patrón de contraseña predeterminado no parece que sea retrocompatible con 1.3. Eliminar mi superusuario y crear uno nuevo funcionó para mí. –

33

Acabo de tener el mismo problema.

Parece que en mi caso, el sitio se estaba ejecutando con Django 1.4 cuando se creó la contraseña (debido a una confusión PYTHONPATH).

Cuando intenté iniciar sesión ejecutando el sitio con 1.3.1 recibí este error. Entonces noté la versión de Django, cambié a 1.4 y el inicio de sesión comenzó a funcionar nuevamente.

Parece que el algoritmo de contraseña se ha cambiado en 1.4:

https://docs.djangoproject.com/en/dev/releases/1.4-beta-1/#improved-password-hashing

Y si estuviera usando Django 1.4 alfa también podría ser que la contraseña se ha dañado de manera efectiva (lea la advertencia).

2

Hice todo lo posible para resolver el mismo problema.Finalmente eliminé las tablas de db e hice de nuevo syncdb, creando un nuevo superusuario. Todo funciona bien ahora El problema está relacionado con la mala información del usuario, supongo.

12

Puede restablecer la contraseña en el shell.

from django.contrib.auth.models import User 
u = User.objects.get(username="myuser") 
u.set_password("mypassword") 
u.save() 

Esto sucede cuando bajamos de 1.4.X para probar las implementaciones antiguas según lo detallado por @ h3.

18

La solución más fácil es restablecer su contraseña desde la línea de comandos.

./manage.py changepassword <user> 
Cuestiones relacionadas