2014-02-12 32 views
6

我差不多完成了一個使用codeigniter和ion_auth進行驗證的項目。我無法弄清楚這個小問題:在CodeIgniter中使用ion auth驗證密碼

當用戶想要更改密碼時,我有字段OLD_PASSWORD和NEW_PASSWORD。 OLD_PASSWORD必須與數據庫的密碼(DB_PASSWORD)相匹配。但我無法弄清楚密碼是如何加密存儲在數據庫中的。所以OLD_PASSWORD顯然不匹配DB_PASSWORD。

我沒有更改任何ION_AUTH庫的默認加密。我嘗試了sha1()函數,它與加密不匹配。對於md5()也是如此,不推薦再加密密碼。

任何人都可以爲我點亮這一點嗎?

+1

作爲一個說明,你不應該能夠實際上能夠從數據庫讀取用戶的密碼 - 如果可以的話,您的系統不安全。 – Krease

+0

好的。那麼你如何去驗證密碼?你如何保證它的安全?我已閱讀了一些關於安全性的文章,但作家之間存在如此多的爭議,以至於很難知道如何保持網站安全。 –

+0

[This](http://www.troyhunt.com/2012/05/everything-you-ever-wanted-to-know.html)和[Information Security Stackexchange站點上的密碼管理標記](http:// security.stackexchange.com/questions/tagged/password-management)是一些推薦閱讀,如果你正在瞭解這一點。這與你原來的問題有點相似,但是知道你是否在這方面工作很有用。 – Krease

回答

12

Ion auth creator here。

默認加密可悲地使用SHA1來實現向後兼容。

配置中有一個選項可以使用BCrypt,而不是強烈推薦使用

雖然密碼與鹽一起散列,但僅僅對密碼運行SHA1並不會給您相同的結果。在hash_password()方法來看看,看看它是如何在這裏完成:https://github.com/benedmunds/CodeIgniter-Ion-Auth/blob/2/models/ion_auth_model.php#L267

如果你使用你所能做的默認此來比較:

$user = $this->ion_auth->user(); 

$old_password = $this->input->post('old_password'); 

$password_matches = $this->ion_auth->hash_password_db($user->id, $old_password); 
+2

嗨,本,謝謝你爲我清理這個和真棒認證系統! –

+0

是的,你爲什麼不把這一點加到你的文檔中。我發現很難比較舊密碼。現在它很好地感謝。 – Daroath

+0

嗨本,我在這裏嘗試了答案,但無法讓它工作。 – claudios