gpt4 book ai didi

php - 使用 CakePHP Auth 组件的唯一用户名和电子邮件

转载 作者:行者123 更新时间:2023-12-01 14:12:59 25 4
gpt4 key购买 nike

我是 Cake 的新手,正在构建一个应用程序来学习它。我的用户注册系统出现了一些问题。到目前为止,这是我在 Users Controller 中的注册码:

public function register() {
$this->set('title_for_layout', 'Register');
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$this->Session->setFlash('The user has been saved');
$this->redirect(array('action' => 'register'));
} else {
$this->Session->setFlash('The user could not be saved. Please, try again.');
}
}
}

在我的 User 模型中,我有这个方法来散列密码:

public function beforeSave() {
if (isset($this->data[$this->alias]['password'])) {
$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
}
return true;
}

这有效,用户被添加到我的数据库中的 users 表中,其中包含他们的用户名、电子邮件和散列密码。但是,没有进行检查以确保用户名和电子邮件是唯一的。

根据我有限的理解,我需要向我的 User 模型添加一些验证规则,以确保用户名和电子邮件字段在输入表之前是唯一的吗?目前我只有这些验证规则:

public $validate = array(
'username' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'A username is required'
)
),
'email' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'An email is required'
)
),
'password' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'A password is required'
)
)
);

此外,我的注册表单有一个名为 passwordConfPassword (confirm) 字段。我想在用户输入用户表之前检查用户是否正确输入了密码,但我不知道该怎么做。我猜想在我的注册方法中的某处我需要检查这两个密码是否相同。

感谢您的帮助。

最佳答案

isUn​​ique 规则适用于您的用户名和电子邮件字段。下面是一个代码示例,展示了如何为每个字段使用多个规则:

public $validate = array(
'username' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'You must enter a username.'
),
'length' => array(
'rule' => array('between', 3, 15),
'message' => 'Your username must be between 3 and 15 characters long.'
),
'unique' => array(
'rule' => 'isUnique',
'message' => 'This username has already been taken.'
)
),
'password' => array(
'required' => array(
'rule' => array('notEmpty'),
'message' => 'You must enter a password.'
),
'length' => array(
'rule' => array('minLength', '6'),
'message' => 'Your password must be at least 6 characters long.'
)
),
'email' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Please enter a valid email address.'
)
)
);

至于比较密码,只需编辑您的 beforeSave 回调并相互检查密码,如果匹配则返回 true,否则返回 false。像这样:

public function beforeSave() {
if (isset($this->data[$this->alias]['password'])) {
if($this->data[$this->alias]['password'] === $this->data[$this->alias]['passwordConf']) {
$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
return true;
} else {
return false;
}
}
return true;
}

关于php - 使用 CakePHP Auth 组件的唯一用户名和电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com