我的目標是爲每個用戶提供一個獨特的salt,而不是僅爲每個用戶使用Configure::read('Security.salt')
。CakePHP 2:覆蓋AuthComponent的「密碼」方法
我知道CakePHP 2.x不再自動哈希密碼。這使我可以對密碼進行模型驗證,這非常好。但是,我沒有看到可以重寫AuthComponent的「密碼」方法的方法。因此,即使我可以控制密碼在保存到數據庫之前如何散列,我無法控制在執行實際登錄時密碼是如何散列的。從食譜:
你不需要調用
$this->Auth->login()
之前哈希密碼。
我該怎麼做才能使$this->Auth->login()
使用密碼散列的自定義方法?
謝謝。
更新:我結束了與漢尼拔萊克博士的答案(創建一個自定義的身份驗證對象)。以下是如何做到這一點:
舊代碼:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
新的代碼(變 「形」 到 「自定義」):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
創建「應用程序/控制器/組件/認證/ CustomAuthenticate.php 「使它看起來像這樣:
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class CustomAuthenticate extends FormAuthenticate {
}
複製 」_findUser「 和 」_password的lib /蛋糕/控制/通訊「 的方法」 ponent/Auth/BaseAuthenticate.php「並將它們粘貼到」CustomAuthenticate「類中。然後進行以下兩處修改 「_findUser」 的方法:
從 「$條件」 陣列刪除此行:
$model . '.' . $fields['password'] => $this->_password($password),
變化
if (empty($result) || empty($result[$model])) {
到if (empty($result) || empty($result[$model]) || $result[$model][$fields['password']] != $this->_password($password, $result[$model]['id'])) {
然後使對「_password」方法進行以下兩種修改:
通過改變通過改變
protected function _password($password) {
到protected function _password($password, $id) {
更新salt值創建「$ ID」參數
return Security::hash($password, null, true);
到return Security::hash($password, null, Configure::read('Security.salt') . $id);
最後,更新的AuthComponent::password
所有出現使用Security::hash
具有相同的邏輯以上。
這工作!我用相關的代碼更新了我的問題。謝謝! – Nick 2012-07-17 00:11:28