Cakephp身份验证哈希密码重写问题
我一直在使用它重写我的登录/注销功能,以处理模型中的身份验证和匹配密码 它现在完美地添加了用户,但登录时用户名/密码字段被拒绝。似乎登录函数正在寻找一个不同于我的新hashPasswords函数所存储的散列密码。对可能出现的问题有什么建议吗 这是一个相当标准的设置。谢谢你的帮助 代码的相关部分: 用户模型:Cakephp身份验证哈希密码重写问题,php,cakephp,authentication,Php,Cakephp,Authentication,我一直在使用它重写我的登录/注销功能,以处理模型中的身份验证和匹配密码 它现在完美地添加了用户,但登录时用户名/密码字段被拒绝。似乎登录函数正在寻找一个不同于我的新hashPasswords函数所存储的散列密码。对可能出现的问题有什么建议吗 这是一个相当标准的设置。谢谢你的帮助 代码的相关部分: 用户模型: var $validate = array( 'password' => array( 'The Password must be filled' =>a
var $validate = array(
'password' => array(
'The Password must be filled' =>array(
'rule' => 'notEmpty',
'message' => 'Please supply a valid password.'
),
'The Password must be between 5 and 15 characters' => array(
'rule' => array('between', 5, 15),
'message' => 'The password must be between 5 and 15 characters.'
),
'The passwords do not match' => array(
'rule' => 'matchPasswords',
'message' => 'The passwords do not match.'
)
),
function hashPasswords($data) {
if (isset($this->data['User']['password'])) {
$this->data['User']['password'] = Security::hash($this->data['User']['password'], NULL, TRUE);
return $data;
}
return $data;
}
function beforeSave() {
$this->hashPasswords(NULL, TRUE);
return TRUE;
}
用户控制器:
function beforeFilter() {
parent::beforeFilter();
if ($this->action == 'add' || $this->action == 'edit' ) {
$this->Auth->authenticate = $this->User;
}
}
function add() {
if (!empty($this->data)) {
if ($this->User->save($this->data)) {
$this->Session->setFlash('Your Account Has Been Created.');
$this->redirect(array('action' => 'homepage'));
}
}
}
function login() {
}
我没看过录像,但是- 当$this->data['User']有一个“username”和“password”数组,并用于保存用户时,蛋糕实际上会对密码进行哈希运算。可能发生的情况是您的哈希密码再次被哈希-请查看上的cake文档 就密码匹配而言,在客户端进行密码匹配实际上要容易得多,因为客户端没有散列大量验证表单的Jquery函数。您甚至可以编写一个简单的:
if($this->data['User']['password'] != $this->data['User']['password_conf']{
$this->Session->setFlash('Passwords do not match');
} else {
//save user etc
}
如果您希望在模型中进行验证,那么一定要编写一个自定义的验证规则-但是密码将再次为您进行散列-您只需要比较未散列的版本,看看它们是否匹配,如果匹配,则返回true
此外-每个人都有完全不同的用户身份验证方法-首先,请阅读文档-对于一个简单的经过身份验证的/ACL应用程序来说,有一个简单的解决方案,需要大约30分钟才能完成,应该是任何人的起点。AuthComponent正在为您处理密码哈希。为什么要手动对其进行散列?浏览完那段视频后:也许你还得看本系列的下一段视频,但这本身似乎有点毫无意义……:-/这是从整个视频。我相信密码散列是单独完成的,因为他们正在延迟它并将其保存在beforeSave中。这样我们就可以匹配模型中的密码,避免在控制器中进行验证。