ValueError: Demasiados valores para descomprimir Django

Así que acabo de desplegar mi primera aplicación 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, aparece 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'}), 

La siguiente es la traza

 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 

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 en la statement algo, salt, hsh = enc_password.split('$') en el rastreo. La división de contraseñas cifradas devuelve más de 3 valores.

Por lo tanto, por favor, eche un vistazo a los esquemas de cifrado de contraseña y relacionados.

Solo tuve 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 mezcla de 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 cambió en 1.4:

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

Y si estaba usando Django 1.4 alpha, también podría ser que la contraseña se haya corrompido efectivamente (lea la advertencia).

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

 ./manage.py changepassword  

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 implementaciones antiguas como se detalla en @ h3.

Hice todo lo posible para resolver el mismo problema. Finalmente borré las tablas db, e hice syncdb de nuevo, creando un nuevo superusuario. Todo funciona bien ahora. El problema está relacionado con los malos datos de usuario, supongo.

Tuve un problema similar. La contraseña de mi superusuario estaba corrompida 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ía un error similar. La razón de esto, como Sandip mencionó, es porque La siguiente función espera que se devuelvan tres valores:

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

Tener ese símbolo “$” adicional en su contraseña devolverá cuatro valores y hará que aparezca el mensaje de error “demasiados valores para desempaquetar”.

La solución para mí fue crear un nuevo superusuario utilizando el comando createuperuser en el script manage.py. Más información sobre cómo crear un superusuario se puede encontrar aquí:

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

Todavía no estoy seguro de por qué mi contraseña fue corrompida.