2012-01-21 88 views
24

所以我剛剛部署了我的第一個Django應用程序。ValueError:太多的值來解壓Django

我做了一個syncdb併爲該網站創建了我的超級用戶帳戶。

現在,當我訪問該頁面並按下登錄按鈕時,出現此錯誤。我認爲這與密碼有關,但我不確定。

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

我使用的是通用登錄視圖

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

以下是回溯

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

是的,有在密碼有問題。

錯誤是由於密碼已被加密並存儲在數據庫中。從回溯中的陳述algo, salt, hsh = enc_password.split('$')可以清楚地看到。加密的密碼分割返回3個以上的值。

所以,請看密碼加密方案及相關內容。

+0

這是爲什麼呢?我剛做了一個'syncdb',並在提示時創建了一個用戶。另外我只是看了一下pw散列表,裏面有3個'$'......這樣就可以分成4個...... –

+0

我發現問題在哪裏。當我擺弄設置時,我搞砸了密鑰。謝謝 –

+0

奇怪。我得到完全相同的例外。我改變了我的密鑰,但我仍然得到同樣的錯誤。 – Burak

0

我有類似的問題。我的超級用戶的密碼被破壞了。您可以通過檢查數據庫中的auth_user表來檢查它。你的密碼應該是「」sha1 $ 263a7 $ c17f83f1d1902fb7bd527d00ffcb22f4dc97a978「,如果你有兩個以上的」$「符號,你會得到一個類似的錯誤,正如Sandip提到的,原因是下面的函數需要返回三個值:

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

有額外的「$」在您的密碼符號將返回四個值,並導致了「太多的價值觀,以解包」的錯誤消息出現

我的解決方案是使用manage.py腳本中的createsuperuser命令創建一個新的超級用戶。有關如何創建超級用戶的更多信息可以是這裏D:

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

我仍然不知道爲什麼我的密碼已損壞。

+1

你使用Django 1.4 alpha嗎?看看我的回覆.. –

+0

我也有這個問題。我從Django 1.4開始,然後恢復到1.3以保持與Grappelli的兼容性。我在安裝1.4時創建了我的超級用戶,並且默認的密碼模式看起來不像它向後兼容1.3。刪除我的超級用戶並創建一個新的爲我工作。 –

33

剛剛有同樣的問題。

看來,在我的情況下,該網站與Django 1.4運行時密碼創建(由於PYTHONPATH混淆)。

當我試圖登錄運行與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

我做了所有事情來解決同樣的問題。最後我刪除了數據庫表,並再次創建了syncdb,創建了新的超級用戶。現在一切正常。這個問題與我猜測的不好的用戶數據有關。

12

您可以重置shell中的密碼。

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

發生這種情況時,我們將從1.4.X降級到測試舊部署,詳見@ h3。

18

最簡單的修復方法是從命令行重置密碼。

./manage.py changepassword <user> 
相關問題