2013-02-09 82 views
0

我想要的用戶進行身份驗證,但使用authenticate(),Django的(1.4)返回None驗證用戶...我試圖手動查詢數據庫:無法使用驗證()

select * from auth_user where password = THE_PASSWORD 

和我讓預期的用戶回來。 我試圖使用斷點進行調試,我發現check_password()函數django.contrib.auth.hashers正在返回Falsehasher.verify() ......但老實說,我不知道爲什麼以及如何深入挖掘問題......任何想法?

ps。我沒有改變我原來的SECRET_KEY

UPDATE:

OMG ......我終於想通了這個問題!實際上,在我的應用程序中,我有一個用戶註冊表單,一旦用戶提交表單,他將收到一封帶有激活鏈接的電子郵件,該鏈接將用戶設置爲「活動」...我想實現「自動登錄「一旦用戶通過鏈接被激活,爲了做到這一點,我試圖使用哈希密碼(這是我可以以編程方式檢索的唯一一個)進行身份驗證,但是django authenticate()期待原始密碼,因爲它是用戶在登錄表單中手動寫入的內容,並且出於安全原因,它不能從存儲在數據庫中的哈希表中開始重新生成... 所以,我從根本上遵循了一個糟糕的做法......在我看來,正確的舉動是向用戶展示一個新的頁面:「恭喜你,你的帳戶已被激活......現在你實際上可以使用這種新形式登錄:)」

+1

這有幫助嗎? http://stackoverflow.com/questions/1947811/authenticate-returns-nothing – 2013-02-09 19:19:04

+0

不幸的是,它並沒有,因爲我已經在調用save()之前使用set_password()方法存儲哈希密碼:P – daveoncode 2013-02-09 20:06:58

回答

0

如果使用原始密碼手動查詢數據庫併成功返回用戶,這意味着您已將原始密碼(而不是散列的密碼)存儲在數據庫中。當然,Django試圖在數據庫中查找哈希密碼將失敗。

請注意,Django,不是你,在這裏做的是正確的事情:你必須存儲散列密碼,而不是原始密碼。

+0

我存儲哈希一個!(使用set_password()) – daveoncode 2013-02-09 20:04:30

+0

我接受了你的答案,因爲雖然它不能解決我的問題,但它幫助我的大腦找到它! :) – daveoncode 2013-02-09 20:39:02