2015-04-04 60 views
0

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

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);  
} 

最后我只是试图去完全不在笨与this..did不行 -

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

我的控制oller是这样的 -

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'; 
    } 
} 

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

回答

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