【问题标题】:Why is the CakePHP password field is empty when trying to access it using $this->data?为什么尝试使用 $this->data 访问 CakePHP 密码字段为空?
【发布时间】:2009-06-06 20:05:06
【问题描述】:

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

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->data 的内容时,密码字段变为空。 我该如何解决这个问题?

当我将密码重命名为 password2 或其他名称时,它可以工作!!!奇怪

【问题讨论】:

    标签: php authentication cakephp


    【解决方案1】:

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

    【讨论】:

    • 是的,但最初如果我想使用 $this->Auth->login($this->data) 它不会工作。
    【解决方案2】:

    我遇到了同样的问题,mrlanrat 的建议对我有用。

    您需要访问 $this->Auth->data['password']

    ,而不是尝试访问 $this->data['password']

    基本上发生的情况是 Auth 组件对密码进行哈希处理并将哈希后的版本移动到 $this->Auth->data 中。出于安全考虑,删除了非哈希版本。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您可以做的一件事是让用户确认他们的密码,并将其用于登录功能。我可能完全误读了您要完成的内容,但是如果您让用户使用密码 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');
        

        【讨论】:

          【解决方案5】:

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

          看起来身份验证控制器在执行自动魔法时从数据中删除了密码。

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              【解决方案7】:

              几周前我在做一些 ExtJS 身份验证时遇到了同样的问题。

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

              首先导致这个问题的原因仍然让我感到震惊:)

              【讨论】:

                【解决方案8】:

                首先需要在core.php文件中注释代码Configure::write('Cache.disable', true);

                【讨论】:

                • 你真的想恢复一个 3 年前的帖子(即使 @Shiv 遗憾地还没有选择答案)?^^ 特别是因为你的答案似乎与主题无关。
                猜你喜欢
                • 2018-11-07
                • 1970-01-01
                • 1970-01-01
                • 2021-01-21
                • 2022-10-25
                • 2011-06-04
                • 2014-05-04
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多