我一直在使用此tutorial来重写我的登录/注销功能,以处理模型中的身份验证和匹配密码。
它现在可以完美地添加用户,但在登录时,用户名/密码字段将被拒绝。似乎登录功能正在寻找与我的新hashPasswords()函数存储的不同的哈希密码。关于问题可能是什么建议?
这是一个相当标准的设置。谢谢你的帮助!
代码的相关部分:
用户模型:
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() {
}
答案 0 :(得分:0)
我没有看过视频,但是 -
当$ this-> data ['User']有一个'username'和'password'数组,并用于保存用户时 - cake实际上是哈希密码。可能发生的事情是您的哈希密码再次被哈希 - 请查看hashPassword上的蛋糕文档
就密码匹配而言 - 在客户端进行密码匹配实际上要容易得多(在那里验证表单的许多Jquery函数)。你甚至可以写一个简单的东西:
if($this->data['User']['password'] != $this->data['User']['password_conf']{
$this->Session->setFlash('Passwords do not match');
} else {
//save user etc
}
如果你想在模型中进行验证,那么一定要编写一个自定义验证规则 - 但是密码将再次为你进行哈希处理 - 你只需要比较非散列版本并查看它们是否匹配,如果他们这样做则返回true
此外 - 每个人都有完全不同的方式对用户进行身份验证 - 首先是阅读文档 - 对于一个简单的Authenticated / ACL应用程序有一个excellent tutorial,需要大约30分钟才能完成,并且应该是任何人的起点。