0

我在我的应用程序中使用 CakePHP,我有一个用户模型。这个用户有一个密码,它有一个正则表达式来验证。正则表达式强制用户使用至少 6 个字符长的密码,至少包含 1 个数字和特殊字符。

验证如下所示:

'password' => array(
     'ruleName' => array(
     'rule' => array('custom', '/^.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[@#$%^&+=]).*$/i'),
            'message' => 'Password not legit',
            'allowEmpty' => true
     )
)

当我想编辑我的密码时,此验证效果很好。但是当我想编辑用户时(那里没有更改密码的选项), $this->User->save() 失败。

如果我调试我的 $this->User->validationErrors,唯一显示的是:

array(
    'password' => '*****'
)

我的帖子数据中没有设置密码字段,因此根本不应该进行验证。当我评论这块验证代码时,可以保存用户。

任何人都知道我做错了什么?

4

1 回答 1

0

我已经自己解决了。在保存 User 对象之前,我已经做了一个 $this->User->Read(null, $userid) 用于其他目的。

这导致记住 $this->User 对象中读取的值(包括密码)。

由于在 $this->User 对象上调用了 save 方法,因此密码值也在尝试保存。但是由于 ** *根据正则表达式无效,因此保存失败。

无论如何感谢您的帮助!

于 2013-08-16T12:38:31.980 回答