如何在 codeigniter 4 中将新用户数据插入数据库

How to insert new user data into database in codeigniter 4

我正在尝试 post 将用户数据存入数据库,但密码部分出现错误,请帮助

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(); ?>

转到 app/config/encryption。php 并设置您的密钥和驱动程序。

您可以通过将您自己的配置对象传递给服务调用来替换配置文件的设置。 $config 变量必须是 Config\Encryption class 的实例或扩展 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 函数,它获取用户密码和哈希值以及 returns 布尔值。

 password_verify($usepassword, $hash));

有关散列密码的更多详细信息,请参阅此 link: https://www.php.net/manual/en/function.password-hash.php