在数据库条目php上更改密码哈希

时间:2015-04-04 04:22:11

标签: php mysql database codeigniter hash

使用password_hash()并哈希密码并将其存储在DB中,它不会传递password_verify。我尝试在数据库外部通过它们运行一个单词测试函数,这很好。并且,如果我散列一个单词,然后手动将其放入数据库,它在登录中工作正常。但是,当我通过我的代码/ SQL将哈希输入到我的数据库中时...显然正在发生哈希值,并使其无法使用(据我所知)。我无法弄清楚是什么。我检查了我的桌子..这看起来很好,Varchar(255)utf8_bin 我正在使用codeigniter框架。 Codeigniter转义它的插入,除非你用如下所示的设置执行它并使用FALSE - 不起作用。

function register($data){
    $this->db->set($data, FALSE);
    $this->db->set('word_of_passing', $data['word_of_passing'], FALSE);
    $this->db->insert('cred');
}

这不起作用 -

function register($data){
    $this->db->query('INSERT INTO cred (user_name, word_of_passing) VALUES ("'.$data['user_name'].'", "'.$data['word_of_passing'].'")');
}

这不起作用 -

function register($data){
    $this->db->insert('cred', $data);       
}

最后我只是试图完全使用codeigniter而不是这个...而且没有用 -

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "moviedb";

    // Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
$sql = "INSERT INTO cred (user_name, word_of_passing) VALUES ('".$data['user_name']."', '".$data['word_of_passing']."')";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();

我的控制器是这样的 -

public function check_pw(){
    //password and username post
    $data = $this->input->post('username');
    $password = $this->input->post('password');
    //pass username to model to retrieve stored hash
    $this->load->model('lindsdata');
    $return_data = $this->lindsdata->password($data);
    //$pw is indeed getting the stored hash, but not passing
    $pw = password_verify($password, $return_data[0]['word_of_passing']);
    if ($pw == 1) {
        $this->session->set_userdata(array("logged_in" => "true",
                                                "user_id"  =>                   $return_data[0]['user_id']
                                                ));
    redirect('/update/user', 'location');           
    }else{
        $error['the_error'] = 'Your Credentials are wrong';
    }
}

我能想到的只是它必须是我的数据库中的设置或什么?我真的很难过。

1 个答案:

答案 0 :(得分:0)

如果你在数据库中插入问题我建议你添加像你的控制器放置模型名称和功能

之类的模型功能
class Lindsdata extends CI_Modle{
public function password(){
 $data = array(
          'user_name' => $this->input->post('username'), 
          'word_of_passing' => $this->input->post('password'),    
        );

   $query = $this->db->insert('cred',$data);
   if($query)
    {
     return true;
    }
   else
   {
    return false;
   }
} 
}

进入像

这样的控制器
   $this->load->model('lindsdata');
    $return_data = $this->lindsdata->password();