我知道CakePHP 2.x不再自动密码密码.这允许我对密码执行模型验证,这是非常好的.但是,我没有看到我可以覆盖AuthComponent的“密码”方法.所以即使我可以控制密码在保存到数据库之前是如何进行散列的,所以我无法控制在执行实际登录时密码是如何散列的.从食谱:
You don’t need to hash passwords before calling
$this->Auth->login()
.
我可以做什么来使$this-> Auth-> login()使用自定义的密码哈希方法?
谢谢.
更新:我结束了汉尼拔Lecter博士的回答(创建一个自定义认证对象).以下是如何做到这一点:
旧代码:
$this->Auth->authenticate = array('Form' => array('fields' => array('username' => 'email')));
新代码(将“Form”更改为“Custom”):
$this->Auth->authenticate = array('Custom' => array('fields' => array('username' => 'email')));
创建“app / Controller / Component / Auth / CustomAuthenticate.PHP”,使其如下所示:
<?PHP App::uses('FormAuthenticate','Controller/Component/Auth'); class CustomAuthenticate extends FormAuthenticate { }
从“lib / Cake / Controller / Component / Auth / BaseAuthenticate.PHP”复制“_findUser”和“_password”方法,并将它们粘贴到“CustomAuthenticate”类中.然后对“_findUser”方法进行以下两个修改:
>从“$conditions”数组中删除此行:$model. ” . $fields [‘password’] => $这 – > _password($密码),
>更改if(empty($result)|| empty($result [$model])){to if(empty($result)|| empty($result [$model])|| $result [$model] $fields [‘password’]]!= $this-> _password($password,$result [$model] [‘id’])){
>通过更改保护函数_password($password){保护函数_password($password,$id){
>通过更改return Security :: hash($password,null,true)来更新盐值;返回Security :: hash($password,Configure :: read(‘Security.salt’).$id);
最后,更新所有出现的AuthComponent :: password以使用与上述相同逻辑的Security :: hash.