CakePHP - 无法使用Authcomponent :: user访问模型中登录用户的密码

时间:2012-05-19 19:39:33

标签: cakephp authentication cakephp-2.0 change-password

几个月前我开始尝试使用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');?>

我正在使用Promoter模型作为用户,我在AppController中设置:

public $components = array(
    'Auth'=>array(
        ...
        'authenticate' => array(
            'Form' => array('userModel' => 'Promoter')
        ),
        'authorize' => array('Controller')
    )
);

我可以在Controller中验证密码,但这会放弃:)请告诉我是否需要提供更多代码来澄清问题。

感谢。

2 个答案:

答案 0 :(得分:0)

因为cake不会在会话中存储密码:

lib / Cake / Component / Auth / BaseAuthenticate.php第94行

unset($user[$fields['password']]);

答案 1 :(得分:0)

你可能没有做错任何事,这很可能是一个安全功能。没有理由在会话中保留密码。

其次,即使它在会话中,它也会被加密(或者至少我希望如此,如果不是你应该立即改变它!)。所以你仍然无法进行简单的比较。

要比较旧密码,您应查询Promoter模型,并从那里获取散列密码,然后从“更改密码”表单中散列旧密码,最后比较散列结果。