【问题标题】:Password Confirm Validation CakePHP密码确认验证 CakePHP
【发布时间】:2013-06-19 07:26:54
【问题描述】:

我进行了广泛的搜索,尝试了书中的每一个技巧,但我仍然无法让我的 CakePHP 应用程序执行简单的密码确认验证。我尝试过创建这样的自定义验证规则:

'passwordequal' => array('rule' => 'checkpasswords' , 'message' => 'Passwords Do Not Match')

然后像这样定义'checkpasswords':

public function checkpasswords(){

    if(strcmp($this->data['User']['new_password'],$this->data['User']['confirm_password']) == 0 )
    {
        return true;
    }
    return false;
}

'new_password' 和 'confirm_password' 是密码输入字段。这没有用。然后我尝试了一个对“confirm_password”进行哈希处理的方法。那也没有用。我还有其他未经过验证的“规则”,例如“notempty”,我认为这是标准的 CakePHP 规则之一。任何人都可以帮忙。我知道这个问题已经被问过几次,但这些解决方案都没有对我有用。 CakePHP 文档也没有太大帮助。

【问题讨论】:

  • 在比较之前,您是否输出了这些值以查看您的方法是否正确读取了它们?
  • 您能否向我们展示一个失败的$this->data 输入示例?你也应该展示你的整个模型类代码。
  • 您可以在此处找到提示、代码示例以及完整的工作行为:dereuromark.de/2011/08/25/working-with-passwords-in-cakephp
  • @mark 您的密码行为对我帮助很大。现在一切正常。谢谢。

标签: php cakephp cakephp-2.0


【解决方案1】:

视图文件中的两个字段

echo $this->Form->input('password');
echo $this->Form->input('repass');

模型文件

<?php
class Post extends AppModel {
    public $validate = array(
        'repass' => array(
            'equaltofield' => array(
            'rule' => array('equaltofield','password'),
            'message' => 'Require the same value to password.',
            //'allowEmpty' => false,
            //'required' => false,
            //'last' => false, // Stop validation after this rule
            'on' => 'create', // Limit validation to 'create' or 'update' operations
            )
        )
    );

function equaltofield($check,$otherfield)
    {
        //get name of field
        $fname = '';
        foreach ($check as $key => $value){
            $fname = $key;
            break;
        }
        return $this->data[$this->name][$otherfield] === $this->data[$this->name][$fname];
    } 
}?>

【讨论】:

  • 我不知道 $this->data 可以在模型中使用。我认为它在 2.x 版本中已被弃用。谢谢你。
  • 使用echo $this-&gt;Form-&gt;input('repass');时,您的密码显示纯文本。这是不可接受的。更好的是先使用客户端进行验证(javascript)。
  • @DoNhuVy 在视图文件中渲染字段时,可以使用array('type' =&gt; 'password') 作为参数轻松修复它。不能接受的是只依赖客户端进行这种验证。您应该始终期望某些用户会禁用 JavaScript 来“破解”您的系统。
【解决方案2】:

您的模型似乎没有正确加载并使用动态生成的模型。

在 2.x 中比较密码只不过是比较任意两个字段,因为 cake 不再自动对密码进行哈希处理。

您能否确认您的验证方法正在运行,如果notEmpty 之类的简单操作不起作用,则似乎不是。

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2013-09-18
    • 2015-04-03
    • 2023-02-23
    • 2011-08-23
    • 2017-12-06
    • 2021-07-24
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多