Я делаю небольшую систему входа, используя php внутри рамки Codeigniter. Я использую класс шифрования для кодирования пароля, хранения в базе данных. Затем, при входе в систему, находит свой зашифрованный пароль, используя свое имя пользователя, а затем сопоставляет его с введенным им паролем. Пароли ARE получают кодировку во время регистрации. И в приведенном ниже коде я смог распечатать закодированный пароль из базы данных, но затем он выходит из строя, когда я запускаю его через декодирование. Но никакого сообщения об ошибке, просто ничего.Декодер 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). И я ОПРЕДЕЛЕННО получаю закодированный пароль, когда запускаю его через декодирование ... но потом ничего. Нет сообщения об ошибке или что-то еще, и очень сильно. Спасибо за это. ... и я не опубликовал модель, потому что я не думаю, что это было актуально, так как это действительно возвращает закодированный пароль для проверки, как следует.
EDIT - это не имеет смысла. $ 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);
EDIT - Мой вход в базу данных довольно прост ... Я не вижу причин для возникновения проблемы. ... все еще не работает либо с расшифровкой, либо с паролем. По-прежнему не проблема. Это простая база данных 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);
}
Невозможно создать проблему. Ваш тестовый код работает нормально –
Какое значение вставлено в вашу базу данных, когда пароль '' test''; –
тест, который я только что сделал в браузере, не запускал его через базу данных. Я должен попробовать это. –