我在Codeigniter框架内使用php做了一个小小的登录系统。我使用加密类来编码密码,存储在数据库中。然后在登录时,使用他们的用户名找到他们的加密密码,然后将其与他们输入的密码进行匹配。密码在注册期间被编码。在下面的代码中,我已经能够从数据库中打印编码密码,但是当我通过解码运行它时,它就会失败。但没有错误信息,只是没有。Codeigniter解码不起作用
public function check_pw(){
//post username and password to database
$data['username'] = $this->input->post('username');
$data['password'] = $this->input->post('password');
$this->load->model('lindsdata');
//encoded password returned from database - this is working
$return_data = $this->lindsdata->password($data);
//$return_data = $this->encrypt->decode($return_data);
//print_r shows $return_data does hold the encrypted password
//but when I uncomment the line with decode in it, $return_data print_rs nothing.
print_r($return_data);
if ($return_data == $data['password']) {
redirect('/update/user', 'location');
}
if($return_data !== $data['password']){
//at this point, $return_data of course still has nothing
print_r($return_data);
//print_r below is the entered password by user..that shows up.
print_r($data['password']);
$error['the_error'] = 'Your Credentials are wrong';
}else{
$error['the_error'] = '';
}
}
我试着下面这个以确保事情正在编码正确...这返回“测试”按预期。
$a = "test";
$test = $this->encrypt->encode($a);
$test = $this->encrypt->decode($test);
print_r($test);
为了进一步迷惑我......我本来手动编码的密码(如上面的代码),并把结果在数据库与用户(我还没有建立一个登记表呢,只是这样做,所以我有一个用户工作)... ...出于某种原因,工作正常。没有其他编码的用户密码正在工作。我不明白为什么他们在解码过程中失败。数据库设置为varchar(255)。而且,当我通过解码运行它时,我确实获取了编码密码......但没有任何结果。没有错误信息或任何东西,非常难倒。感谢它的进步。 ...并且我没有发布该模型,因为我不认为它是相关的,因为它确实返回了编码密码以进行检查。
编辑 - 它没有任何意义$ return_data打印来自数据库的散列和$密码返回正确的密码,但$ pw什么也没有返回。 ...可能是因为我的SQL数据库在某种程度上破坏/编辑我的散列?这应该从我可以告诉的工作。
$data['username'] = $this->input->post('username');
$password = $this->input->post('password');
$this->load->model('lindsdata');
$return_data = $this->lindsdata->password($data);
print_r($return_data);
print_r($password);
$pw = password_verify($password, $return_data);
print_r($pw);
编辑 - 我对数据库的输入非常简单......我没有看到有任何问题的原因。 ...仍然无法解码或password_verify。仍然不知道这个问题。这是一个简单的Mysql数据库...
public function register_submit(){
$data['user_name'] = $this->input->post('user_name');
$pwd = $this->input->post('password');
$data['password'] = password_hash($pwd, PASSWORD_DEFAULT);
$this->load->model('lindsdata');
$this->lindsdata->register($data);
}
function register($data){
$this->db->insert('cred', $data);
}
不能产生问题。你的测试代码工作正常 – 2015-04-01 18:44:15
当密码是'test'时,你的数据库插入了什么值; – 2015-04-01 18:50:10
测试我刚刚在浏览器中做过,没有通过数据库运行。但我应该尝试一下。 – 2015-04-01 19:16:53