Войти с хешированным паролем в Codeigniter - PullRequest
0 голосов
/ 08 июля 2020

У меня есть пароль от магазина с хешированием в codeigniter. После этого я хочу войти с хешированным паролем. Во-вторых, я должен передать идентификатор пользователя. Я воспользовался помощью этого веб-сайта, но он попадает на страницу с ошибкой. я использовал password_verify(). но он дает длинную ошибку

то, что я пробовал модель

 public function isvalidateuser($email,$password)
    {
        $q = $this->db->where(['email'=>$email,'password'=>$password])
                    ->get('user');
                    $row = $q->row();

                    if(password_verify($password,$row->password))
                    {
                       
                        return $q->row()->id;
                      
                    }

                    else
                    {
                        return false;
                    }
    }

контроллер

public function  userloginvalidation1()
{
    $email    = $this->input->post('email');
    $password = $this->input->post('password');

    $this->load->model('loginmodel');
    
    $id = $this->loginmodel->isvalidateuser($email, $password);
    
    if ($id) {
   
        // You probably want to do this in model ↓↓
        $userName = $this->db->select('name')->from('user')->where('id', $id)->get()->row(); // get the name from the table

        $this->load->library('session'); // autoloading the session library is a good idea
        
        // set the session 
        $this->session->set_userdata('id', $id);
        $this->session->set_userdata('name', $userName->name); // or simply $_SESSION['name'] = $userName->name;
        
        return redirect('user/userdashboard');
    
    } else {
        
        echo "not login;";
        exit();
        $this->load->library('session');
        $this->session->set_flashdata('loginfailed', 'invalid username or password');
     
        return redirect('user/userlogin');
    }      
}

ошибка, которую я получил

A PHP Error was encountered
Severity: Notice

Message: Trying to get property 'password' of non-object

Filename: models/loginmodel.php

Line Number: 16

Backtrace:

File: C:\xampp\htdocs\blog\application\models\loginmodel.php
Line: 16
Function: _error_handler

File: C:\xampp\htdocs\blog\application\controllers\user.php
Line: 45
Function: isvalidateuser

File: C:\xampp\htdocs\blog\index.php
Line: 315
Function: require_once

not login;

как решить эту ошибку ???? помогите !!!

Ответы [ 2 ]

2 голосов
/ 08 июля 2020

Ваша проблема связана с кодом в модели

$q = $this->db->where(['email'=>$email,'password'=>$password])
                    ->get('user');
                    $row = $q->row();

Вы запрашиваете таблицу базы данных по электронной почте и паролю поля. Я предполагаю, что пароль field store ha sh value, и вы запрашиваете необработанное значение. Запрос никогда не вернет никаких данных.

Итак, вы должны сделать следующее

$q = $this->db->where(['email'=>$email)
                    ->get('user');
                    $row = $q->row();

Теперь у вас должен быть хешированный пароль из таблицы для сравнения.

У вас все еще есть код проблема и будет выдавать ту же ошибку, если он не может найти данные, где отсутствует электронная почта. Чтобы этого не произошло, вы можете

if($q->num_rows()>0){
   // your Code
}
0 голосов
/ 08 июля 2020

mail2bapi - хороший ответ. Однако перед тем, как продолжить проверку, необходимо проверить $row на значение non null. Предположим, кто-то предоставил логин с незарегистрированным адресом электронной почты!

Это будет примерно так:

public function isvalidateuser($email,$password)
    {
        $q = $this->db->where(['email'=>$email])
                    ->get('user');
                    $row = $q->row();
                    if (!is_null($row)){

                      if(password_verify($password,$row->password))
                      {
                       
                          return $q->row()->id;
                      
                      }

                      else
                      {
                          return false;
                      }
                   }
                    else{
                        return false;
                   } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...