如何在codeigniter 4中插入新的用户数据到数据库中?

问题描述 投票:0回答:1

我试图将用户数据发布到数据库中,但在密码部分出现了错误,请帮助我。

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(); ?>
php authentication post encryption codeigniter-4
1个回答
0
投票

到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

© www.soinside.com 2019 - 2024. All rights reserved.