Reputation: 6304
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
Reputation: 13859
The easiest fix is to reset your password from the command line.
./manage.py changepassword <user>
Upvotes: 18
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
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
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
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
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