2015-05-20 69 views
0

作爲標題,是否有我在CakePHP的控制器中使用BlowFishPasswordHasher而不是Model(我只是使用saveField來保存用戶的新密碼)?如何使用BlowfishPasswordHasher在CakePHP控制器中更改密碼?

+0

你可以在你的控制器中試試這個$ oldpwd ='123456'; $ pass = Security :: hash($ oldpwd,'blowfish',true); –

+0

您應該始終提及您使用的確切cakephp版本。 – mark

+0

使用2.x和shim插件,您可以使用3.x的Factory backport加載哈希:https://github.com/dereuromark/cakephp-shim/blob/2.x/docs/Auth.md#passwordhasherfactory – mark

回答

0

您應該在模型中處理密碼的更改,因爲您很可能使用beforeSave()函數對密碼進行哈希處理。

通過自定義驗證來做到這一點是最好的方法,因爲您可以使用正確的流程來檢查舊密碼是否與用戶提供的密碼相匹配。如果是,則返回true,允許使用beforeSave()對新密碼進行散列。

例如:

模型beforeSave()

public function beforeSave($options = array()) { 

    if (isset($this->data[$this->alias]['password']) && !empty($this->data[$this->alias]['password']) && strlen($this->data[$this->alias]['password']) > 0) { 

    $passwordhash = new BlowfishPasswordHasher(); 
    $this->data[$this->alias]['password'] = $passwordhash->hash($this->data[$this->alias]['password']); 

    } 

    return parent::beforeSave(); 

} 

使用定製驗證方法等:

自定義驗證

public function oldPassword($password) { 

    $user = $this->find('first', array('conditions' => array('username' => $this->data[$this->alias]['username']))); 

    $passwordhash = Security::hash($password['oldPassword'], 'blowfish', $user[$this->alias]['password']); 

    if ($passwordhash === $user[$this->alias]['password']) { 

    return true; 

    } else { 

    return false; 

    } 

} 

使用上述內容可以讓您在允許表單提交之前使用CakePHP驗證來檢查舊密碼。如果舊密碼與數據庫中的舊密碼匹配,則返回true以允許表單保存,並調用beforeSave以散列新密碼。