我试图将用户数据发布到数据库中,但在密码部分出现了错误,请帮助我。
Call to undefined method App\Controllers\Register::encrypt()
榜样
public function register()
{
$model = new RegisterModel();
if (!$this->validate([
'username' => 'required|min_length[3]|max_length[25]',
'password' => 'required',
'user_phone' => 'required|min_length[11]|max_length[11]'
])) {
echo view('templates/header', ['page_title' => 'Register']);
echo view('dashboard/register');
echo view('templates/footer');
} else {
$model->save([
'username' => $this->request->getVar('username'),
'password' => $this->encryption->encrypt($this->input->post('password')),
'user_phone' => $this->request->getVar('user_phone'),
]);
echo view('news/success');
}
}
如果用户已经存在,这就不会报告任何事情。
<?= \Config\Services::validation()->listErrors(); ?>
到appconfigencryption.php中设置你的秘钥和驱动。
或
你可以通过向Services调用传递一个你自己的配置对象来替换配置文件的设置。$config变量必须是Config/Encryption类的一个实例,或者是一个扩展CodeIgniter/Config/BaseConfig的对象。
$config = new Config\Encryption();
$config->key = 'aBigsecret_ofAtleast32Characters';
$config->driver = 'OpenSSL';
$encrypter = \Config\Services::encrypter($config);
顺便说一下codeigniter的文档中说:"请不要使用这个或其他任何加密类。
不要使用这个或其他任何加密库来存储密码! 密码必须用哈希来代替,你应该通过PHP的密码哈希扩展来实现。
password_hash()使用一个强大的单向哈希算法创建一个新的密码哈希。 password_hash()与crypt()兼容。因此,由crypt()创建的密码散列可以与password_hash()一起使用。
password_hash支持多种哈希算法,你可以使用其中的任何一种,下面是一个例子。
$hashedpass = password_hash($password, PASSWORD_ARGON2I);
例如,要在登录时验证你的密码,可以使用password_verify函数,它提取了用户的密码和哈希值并返回布尔值。
password_verify($usepassword, $hash));
关于密码哈希的更多细节,请看这个链接。https:/www.php.netmanualenfunction.password-hash.php