几个月前我开始尝试CakePHP,现在我正在尝试为登录用户创建一个"更改密码页面"。我有一个由以下字段组成的表格:当前密码,新密码和新密码确认。对于当前密码,我想验证它是否与登录用户的密码匹配,作为用户模型中的规则。我知道我可以通过以下方法获取登录用户的信息:AuthComponent::user()
.但是,它为我提供了除密码之外的模型的每个字段。
我知道Auth->login()
负责为登录用户设置会话变量,但我不确定我在这里做错了什么,只有密码字段无法访问:
public function login() {
if ($this->request->is('POST')) {
if($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Your username/password combination was incorrect.');
}
}
}
这是我的登录视图:
<h2>Login</h2>
<?php
echo $this->Form->create('Promoter');
echo $this->Form->input('username');
echo $this->Form->input('password', array('type' => 'password'));
echo $this->Form->end('Login');?>
我以用户身份使用启动器模型,这是我在应用程序控制器中设置的:
public $components = array(
'Auth'=>array(
...
'authenticate' => array(
'Form' => array('userModel' => 'Promoter')
),
'authorize' => array('Controller')
)
);
我可以求助于在控制器中验证密码,但那将放弃:)请告诉我是否需要提供更多代码来澄清问题。
谢谢。
您可能没有做错任何事,这很可能是一项安全功能。没有理由在会话中保留密码。
其次,即使它在会话中,它也会被加密(或者至少我希望如此,如果不是,你应该立即更改它!所以你仍然无法做一个简单的比较。
要比较旧密码,您应该查询您的Promoter
模型,并从那里获取哈希密码,然后从"更改密码"表单中哈希旧密码,最后比较哈希结果。
因为 cake 不会在会话中存储密码:
lib/Cake/Component/Auth/BaseAuthenticate.php第 94 行
unset($user[$fields['password']]);