我正在实现一个身份验证组件, 这是我的注册页面
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或其他东西时,它的工作原理!奇怪
答案 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
发表评论