假设我有一个用户注册,我正在使用Auth组件(当然允许/ user / register)。
问题是如果我需要在模型中设置minLength验证规则,它不起作用,因为Auth组件散列密码因此它总是超过我的minlength密码,即使它是空白也会通过。
如何解决此问题?提前谢谢!
答案 0 :(得分:6)
实际上,您必须重命名密码字段(例如,“pw”)以防止Auth组件自动散列它。然后,如果密码通过验证规则,则对其进行哈希并将哈希保存在password
密钥下。这通常在this article描述的beforeFilter()
回调中完成。
还可以验证数据并在控制器中散列密码。通常不鼓励这种做法,但如果你刚刚开始使用CakePHP,可能会更容易理解。
// this code would go after: if (!empty($this->data)
// and before: $this->User->save($this->data)
// validate the data
$this->User->set($this->data);
if ($this->User->validates()) {
// hash the password
$password_hash = $this->Auth->password($this->data['User']['pw'];
$this->data['User']['password'] = $password_hash;
}
答案 1 :(得分:0)
嗯..这是我认为的最佳做法:保留密码字段。包含第二个密码字段'pw2',以便用户可以重新输入密码。优点:
var $validate = array( 'password' => array( 'rule' => array('checkPwd') ) ); function checkPwd($check) { if(!isset($this->data[$this->alias]['password']) || !isset($this->data[$this->alias]['pw2'])) return 'Where are the passwords?'; if($this->data[$this->alias]['password'] !== Security::hash($this->data[$this->alias]['pw2'],null,true)) return 'Passwords are not the same'; if(strlen($this->data[$this->alias]['pw2']))<10) return 'Password not long enough'; return true; }
在表单视图中,为两个密码字段设置'value'=&gt;''。