尝试使用$ this->数据访问时,为什么CakePHP密码字段为空?

时间:2009-06-06 20:05:06

标签: php authentication cakephp

我正在实现一个身份验证组件, 这是我的注册页面


create('User',array('action' => 'login'));
    echo $form->input('primary_email',array('size'=> 32));
    echo $form->input('password',array('label' => 'Password'));
    echo $form->input('remember_me',array('label' => 'Remember Me','type'=>'checkbox','checked' => 'false'));
    echo $html->link('Forgot Password','/users/forgot/');
    echo $form->end('Login'); 

    // Javascripts
    echo $javascript->link('jquery',false);
    //echo $javascript->link('jquery.validate.js',false);
    //echo $javascript->codeBlock($code, array('inline' => false)); 

?>

当我打印$ this->数据的内容时,密码字段变为空。 我该如何解决这个问题?

当我将密码重命名为password2或其他东西时,它的工作原理!奇怪

8 个答案:

答案 0 :(得分:2)

这是因为Auth组件从数据阵列中删除了密码(出于安全考虑)。为什么你还要包含密码呢?记住我的逻辑(我假设你在表单字段中使用它)将处理没有密码的人登录。

答案 1 :(得分:2)

我有同样的问题,而且mrlanrat的建议对我有用。

您无需尝试访问$ this-> data ['password'],而是需要访问$ this-> Auth-> data ['password']

基本上发生的事情是Auth组件散列密码并将散列版本移动到$ this-> Auth->数据中。出于安全目的,将删除非散列版本。

因此,无论何时您需要处理与Auth组件相关的数据,请确保您使用的是$ this-> Auth->数据,而不是$ this->数据。

答案 2 :(得分:1)

我想看看你的login()函数,但确实这个问题看起来很奇怪。您可以通过重命名密码字段来解决此问题,然后在登录功能中执行以下操作:

$this->data['password']=$this->Auth->password($this->data['User']['pwd']);
//now you can call $this->Auth->login and it will work

答案 3 :(得分:1)

您可以做的一件事是让用户确认他们的密码,并将其用于登录功能。我可能完全误读了你想要完成的事情,但如果你让用户确认他们的密码w /密码2字段,你可以比较两者,并且还可以使用确认密码的起始状态,无论它是什么是你想做的。 所以:

echo $form->input('password', array('label' => 'password'));
echo $form->input('password2', array('label' => 'Confirm Password'));

在你想要完成的任何事情的逻辑内部,你可以把:

$morePermanentDataStorage = $this->data['User']['password2'];
if($this->data['User']['password'] == $this->Auth->password($this->data['User']['password2']) {
//function logic here
}

我还假设你上面的表单逻辑实际上以:

开头
echo $form->create('User');

答案 4 :(得分:0)

我在几周前就开始使用ExtJS身份验证时遇到了同样的问题。

一种奇怪的解决方法是转到/config/core.php并暂时更改调试级别,例如从Configure::write('debug', 0);更改为Configure::write('debug', 1);然后运行您的代码 - 不一定是Auth组件的部分 - (如果您愿意,之后再更改调试级别)。现在将使用预期的哈希值填充$this->data['User']['password']

首先导致这种情况的原因仍然让我感到震惊:)

答案 5 :(得分:0)

我遇到了同样的问题,使用$ this-> Auth-> data ['User'] ['user']和$ this-> Auth-> data ['User'] ['password'修好了。

看起来auth控制器在自动执行时会从数据中删除密码。

答案 6 :(得分:0)

我遇到了同样的问题,这与使用电子邮件字段通过此方法登录相关

$this->Auth->fields = array('username' => 'email', 'password' => 'password');

我无法解决它,所以我选择在我的数据库中包含一个用户名字段,现在它完美无缺。

答案 7 :(得分:0)

首先,您需要在文件Configure::write('Cache.disable', true);

中对代码core.php发表评论