【问题标题】:password related validation error in codeignitercodeigniter 中与密码相关的验证错误
【发布时间】:2016-12-01 17:16:30
【问题描述】:

以下代码与我使用 codeigniter 开发的 Web 应用程序中的注册部分有关

<?php
class user extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form','url'));
        $this->load->library(array('session', 'form_validation', 'email'));
        $this->load->database();
        $this->load->model('user_model');
    }

    function index()
    {
        $this->register();
    }

    function register()
    {
        //set validation rules
        $this->form_validation->set_rules('fname', 'First Name', 'trim|required|alpha|min_length[3]|max_length[30]');
        $this->form_validation->set_rules('lname', 'Last Name', 'trim|required|alpha|min_length[3]|max_length[30]');
        $this->form_validation->set_rules('email', 'Email ID', 'trim|required|valid_email|is_unique[user.email]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|matches[cpassword]|md5');
        $this->form_validation->set_rules('cpassword', 'Confirm Password', 'trim|required');

        //validate form input
        if ($this->form_validation->run() == FALSE)
        {
            // fails
            $this->load->view('user_registration_view');
        }
        else
        {
            //insert the user registration details into database
            $data = array(
                'fname' => $this->input->post('fname'),
                'lname' => $this->input->post('lname'),
                'email' => $this->input->post('email'),
                'password' => $this->input->post('password')
            );

            // insert form data into database
            if ($this->user_model->insertUser($data))
            {
                // send email
                if ($this->user_model->sendEmail($this->input->post('email')))
                {
                    // successfully sent mail
                    $this->session->set_flashdata('msg','<div class="alert alert-success text-center">You are Successfully Registered! Please confirm the mail sent to your Email-ID!!!</div>');
                    redirect('user/register');
                }
                else
                {
                    // error
                    $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
                    redirect('user/register');
                }
            }
            else
            {
                // error
                $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">Oops! Error.  Please try again later!!!</div>');
                redirect('user/register');
            }
        }
    }

    function verify($hash=NULL)
    {
        if ($this->user_model->verifyEmailID($hash))
        {
            $this->session->set_flashdata('verify_msg','<div class="alert alert-success text-center">Your Email Address is successfully verified! Please login to access your account!</div>');
            redirect('user/register');
        }
        else
        {
            $this->session->set_flashdata('verify_msg','<div class="alert alert-danger text-center">Sorry! There is error verifying your Email Address!</div>');
            redirect('user/register');
        }
    }
}
?>

我已对相关字段进行了相关验证。但是在尝试注册时,我得到错误密码与确认密码字段不匹配,尽管我为密码和确认密码字段输入了相同的值!怎么改?

【问题讨论】:

    标签: php html forms codeigniter validation


    【解决方案1】:

    自从我使用 codeigniter(CI) 已经有一段时间了。我认为您正在散列(md5)第一个密码,而不是确认密码。如果您尝试以下操作会发生什么:

    $this->form_validation->set_rules('password', 'Password', 'trim|required|matches[cpassword]');
    $this->form_validation->set_rules('cpassword', 'Confirm Password', 'trim|required');
    

    如果这解决了您的问题,您可以在之后进行哈希处理,如下所示:

    //insert the user registration details into database
                $data = array(
                    'fname' => $this->input->post('fname'),
                    'lname' => $this->input->post('lname'),
                    'email' => $this->input->post('email'),
                    'password' => md5($this->input->post('password'))
                    # Replace md5 with cryptographic hashing function that isn't deprecated.
                );
    

    我建议不要使用 md5,尤其是不要使用盐。您可能想查看crypt()password_hash() 和最佳答案here

    【讨论】:

    • 感谢我是 CI 新手,所以如果我再次散列,我应该把它放在哪里以及如何放置?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多