ValueError: Trop de valeurs pour décompresser Django
Donc, je viens de recevoir mon premier django app déployé.
J'ai fait un syncdb
et créé mon compte super-utilisateur pour le site.
Maintenant, quand je accéder à la page et appuyez sur le bouton de connexion, j'obtiens cette erreur. Je pense qu'il a quelque chose à faire avec le mot de passe mais je ne suis pas sûr.
ValueError at /accounts/login/
too many values to unpack
Je suis en utilisant le générique de vue login
(r'^accounts/login/$', login, {'template_name': 'authentication/login.html'}),
Suivant est le 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
Vous devez vous connecter pour publier un commentaire.
Oui, il y a un problème dans le mot de passe.
L'erreur est dans la façon dont le mot de passe a été chiffrées et stockées dans la base de données. Il peut être clairement vu de l'état
algo, salt, hsh = enc_password.split('$')
dans le traceback. Le mot de passe crypté fractionnement des rendements de plus de 3 valeurs.Donc, merci d'avoir regarder le mot de passe de systèmes de cryptage et connexes.
syncdb
et créé un utilisateur lorsque vous y êtes invité. Aussi, j'ai juste regardé le pw de hachage il y a 3$
... donc qui serait divisé en 4...Juste eu le même problème.
Il semble que dans mon cas, le site est en cours d'exécution avec Django 1.4 lorsque le mot de passe a été créé (en raison d'un PYTHONPATH mix-up).
Quand j'ai essayé de connexion de l'exploitation du site avec 1.3.1 j'ai eu cette erreur. Puis j'ai remarqué que la version de Django, sont passés à 1.4 et que la connexion a commencé à travailler à nouveau.
Il semble que l'algorithme de mot de passe a été changé dans la version 1.4:
https://docs.djangoproject.com/en/dev/releases/1.4-beta-1/#improved-password-hashing
Et si vous étiez à l'aide de Django 1.4 alpha, il pourrait également être que le mot de passe a été effectivement corrompu (lire l'avertissement).
La meilleure solution est de réinitialiser votre mot de passe à partir de la ligne de commande.
Vous pouvez réinitialiser le mot de passe dans la coquille.
Ce qui se passe lorsque nous passer de 1.4.X pour tester vieux mutations comme détaillé par @h3.
J'ai tout fait pour résoudre le même problème. Enfin, j'ai supprimé les tables db et fait syncdb encore une fois, la création de nouveaux super-utilisateur. Tout fonctionne bien maintenant. Le problème est lié à de mauvaises données de l'utilisateur, je suppose.
J'ai eu un problème similaire. Le mot de passe de mon super-utilisateur a été quelque peu endommagé. Vous pouvez le vérifier en examinant les auth_user table dans votre base de données. Votre mot de passe doit être quelque chose comme ""sha1$263a7$c17f83f1d1902fb7bd527d00ffcb22f4dc97a978". Si vous avez plus (ou moins) deux"$", symboles, vous obtiendrez une erreur similaire. La raison en est, comme Jonathan mentionné, c'est parce que la fonction suivante s'attend trois valeurs à renvoyer:
algo, salt, hsh = enc_password.split('$')
Ayant extra "$" symbole de votre mot de passe retour quatre valeurs et de provoquer le "trop grand nombre de valeurs à déballer" message d'erreur s'affiche.
La solution pour moi a été de créer un nouveau super-utilisateur à l'aide de la createsuperuser de commande dans le manage.py script. Plus d'informations sur la façon de créer un super-utilisateur peut être trouvé ici:
https://docs.djangoproject.com/en/dev/topics/auth/
Je ne suis toujours pas sûr de savoir pourquoi mon mot de passe a été endommagé.