2012-01-21 6 views
24

私は最初のdjangoアプリケーションをデプロイしました。ValueError:Djangoをアンパックする値が多すぎます

私はsyncdbを実行し、そのサイトのスーパーユーザーアカウントを作成しました。

これでページにアクセスしてログインボタンを押すと、このエラーが発生します。私はそれがパスワードと関係があると思うが、わからない。

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

私は、次のトレースバック

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 

答えて

11

ある

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

包括的なログインビューを使用していますはい、パスワードで問題があります。

エラーは、パスワードが暗号化されてDBに格納される方法にあります。トレースバックのステートメントalgo, salt, hsh = enc_password.split('$')からはっきりと分かります。暗号化されたパスワード分割は3つ以上の値を返します。

だから、パスワード暗号化方式と関連性を見てください。

+0

なぜですか?私はちょうど 'syncdb'を行い、プロンプトが表示されたらユーザを作成しました。また、私はちょうどpwのハッシュを見て、3つの '$' ...ので、4つに分割されます... –

+0

私は問題が何かを発見しました。私が設定をしゃべっていたとき、私は秘密鍵を乱した。ありがとう –

+0

奇妙な。私はまったく同じ例外を取得しています。私は秘密鍵を変更しましたが、私はまだ同じエラーが発生しています。 – Burak

0

私は同様の問題がありました。私のスーパーユーザーのパスワードが何らかの形で破損しました。これを確認するには、データベースのauth_userテーブルを調べます。あなたのパスワードはsha1 $ 263a7 $ c17f83f1d1902fb7bd527d00ffcb22f4dc97a978のようなものでなければなりません。2つ以上の "$"記号がある場合、同様のエラーが発生します。 。

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

「$」、パスワード内のシンボルは、余分な四つの値を返し、エラーメッセージが表示されるように、「解凍するあまりにも多くの価値」が発生することを持って

:以下の関数は、次の3つの値が返されることを期待し

私にとっての解決策は、manageuスクリプトのmanageuperuserコマンドを使用して新しいスーパーユーザーを作成することでした。スーパーユーザーを作成する方法の詳細は、ここでD:

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

私のパスワードが破損した理由私はまだわかりません。

+1

Django 1.4 alphaを使っていましたか?私の返信を見てください。 –

+0

私もこの問題を抱えていました。私はDjango 1.4で始まり、Grappelliとの互換性を維持するために1.3に戻しました。私は1.4をインストールしたときにスーパーユーザーを作成し、デフォルトのパスワードパターンは1.3と下位互換性がないように見えます。スーパーユーザーを削除して新しいユーザーを作成すると、私のために働きました。 –

33

ちょうど同じ問題がありました。

私の場合、サイトはPYTHONPATHミックスアップのためにパスワードが作成されたときにDjango 1.4で動作していたようです。

1.3.1でサイトを実行してログインしようとしたときに、このエラーが発生しました。その後、Djangoのバージョンが1.4に切り替わったことに気付き、ログインが再び開始されました。

パスワードのアルゴリズムは1.4に変更されたようだ。

https://docs.djangoproject.com/en/dev/releases/1.4-beta-1/#improved-password-hashingそして、あなたはDjangoの1.4アルファを使用していた場合、それはまた、(警告を読んで)パスワードが効果的に破損したことがあるかもしれません。

2

私は同じ問題を解決するためにすべてを行いました。最後に、dbテーブルを削除し、syncdbを再度作成して新しいスーパーユーザーを作成しました。すべて今はうまくいく。問題は私が推測する悪いユーザーデータに関連しています。

12

シェルでパスワードをリセットできます。

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

我々は@さh3で説明するよう古い展開をテストするために1.4.Xからダウングレードした場合に発生します。

18

最も簡単な解決方法は、コマンドラインからパスワードをリセットすることです。

./manage.py changepassword <user> 
関連する問題