Я пытаюсь создать функцию входа / регистрации, используя password_hash () и password_verify.
Вот простой код, который я написал.В результате я получаю «неверный пароль» при попытке войти в систему.
Чего мне не хватает?
Зарегистрировать контроллер
public function register() {
$email = $this->input->post('email');
$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT);
$insert_db = $this->db->insert('users',[
'email' => $email,
'password' => $password
}
Я вижу, что функция password_hash, кажется, в порядке, она хранит случайные символы в базе данных.Однако, когда я пытаюсь войти с этими данными, это не работает.
База данных: поле: varchar (255)
Контроллер входа:
public function verifyLogin() {
$email = $this->input->post('email');
$password = ($this->input->post('pswd'));
// load model
$this->load->model('Login_model');
$account = $this->Login_model->verifyLogin($email, $password);
if ($account) {
//if user found, show success msg
echo "successful login";
} else {
echo "invalid password";
}
}
Модель входа
public function verifyLogin($email, $password) {
$query = $this->db->where([ 'email'=> $email])
->get('users');
if ($query->num_rows() == 1) {
// hash fetched from db
$record = $query->row();
$dbPassword = $record->password;
// Hash length showing 60
echo strlen($dbPassword);
if (password_verify($password, $dbPassword)) {
return true;
} else {
return false;
}
}
}
Форма входа
<?= form_open('Login/verifyLogin'); ?>
<label>Email</label>
?php echo form_error('login-email);'?>
<?php echo form_input(['name'=>'login-email', 'value' => set_value('login-email')]); ?>
<label>Password</label>
<?php echo form_error('login-password'); ?>
<?php echo form_password(['name'=>'login-password', 'value' => set_value('login-password')]);?>
<?php echo form_submit(['type' => 'submit', 'value' => 'Login']); ?>
<?= form_close(); ?>