CakePHP 2:覆盖AuthComponent的“密码”方法

前端之家收集整理的这篇文章主要介绍了CakePHP 2:覆盖AuthComponent的“密码”方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的目标是为每个用户提供唯一的盐,而不是为每个用户使用Configure :: read(‘Security.salt’).

我知道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($password,$id){
>通过更改return Security :: hash($password,null,true)来更新盐值;返回Security :: hash($password,Configure :: read(‘Security.salt’).$id);

最后,更新所有出现的AuthComponent :: password以使用与上述相同逻辑的Security :: hash.

你可能创建一个 custom auth object,并哈希密码,但你喜欢.看看 existing auth objects,了解它们的工作原理.

猜你在找的PHP相关文章