bash-
bash-

Reputation: 6304

ValueError: Too many values to unpack Django

So I just got my first django app deployed.

I did a syncdb and created my superuser account for the site.

Now when I access the page and press the login button I get this error. I think it has something to do with the password but I'm not sure.

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

I'm using the generic login view

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

The following is the traceback

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

Upvotes: 24

Views: 19818

Answers (6)

Travis Bear
Travis Bear

Reputation: 13859

The easiest fix is to reset your password from the command line.

./manage.py changepassword <user>

Upvotes: 18

Skylar Saveland
Skylar Saveland

Reputation: 11464

You can reset the password in the shell.

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

This happens when we downgrade from 1.4.X to test old deployments as detailed by @h3.

Upvotes: 12

Burak
Burak

Reputation: 5764

I did everything to solve the same problem. Finally I deleted the db tables, and made syncdb again, creating new superuser. Everything works fine now. The problem is related to bad user data I guess.

Upvotes: 2

h3.
h3.

Reputation: 11068

Just had the same problem.

It seem that in my case, the site was running with Django 1.4 when the password was created (due to a PYTHONPATH mix-up).

When I tried to login running the site with 1.3.1 I got this error. Then I noticed the Django version, switched to 1.4 and the login started working again.

It seems the password algorithm was changed in 1.4:

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

And if you were using Django 1.4 alpha it might also be that the password was effectively corrupted (read the warning).

Upvotes: 33

asdf
asdf

Reputation: 1

I had a similar problem. The password for my superuser was somehow corrupted. You can check this by examining the auth_user table in your database. Your password should be something like ""sha1$263a7$c17f83f1d1902fb7bd527d00ffcb22f4dc97a978". If you have more than (or less than) two "$" symbols, you would get a similar error. The reason for this, as Sandip mentioned, is because the following function expects three values to be returned:

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

Having that extra "$" symbol in your password would return four values and cause the "too many values to unpack" error message to appear.

The solution for me was to create a new superuser by using the createsuperuser command in the manage.py script. More information about how to create a superuser can be found here:

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

I am still not sure why my password was corrupted.

Upvotes: 0

Sandip Agarwal
Sandip Agarwal

Reputation: 1910

Yes, there is a problem in the password.

The error is in the way the password has been encrypted and stored in the DB. It can be clearly seen from the statement algo, salt, hsh = enc_password.split('$') in the traceback. The encrypted password splitting returns more than 3 values.

So, please have look at the password encryption schemes and related.

Upvotes: 11

Related Questions