Не удается сохранить все данные пользователя в сеансе после входа в систему на codeigniter - PullRequest
1 голос
/ 20 апреля 2019

Я разрабатываю метод входа в свой проект. Я не могу сохранить все свои пользовательские данные в сеансе после входа в систему. Я могу хранить только те данные, которые я использовал для входа в систему.

Как я могу хранить электронную почту и вводить в сеансе, но я не могу сохранить имя пользователя в сеансе.

Мой контроллер

public function login()
{
    $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[3]|alpha_dash');
    $this->form_validation->set_rules('type', 'Type', 'trim|required');

    if($this->form_validation->run() == FALSE)
    {
        /*=== LOAD DYNAMIC CATAGORY ===*/
        $this->load->model('admin_model');
        $view['category'] = $this->admin_model->get_category();
        /*==============================*/

        $view['user_view'] = "users/login";
        $this->load->view('layouts/user_layout', $view);
    }
    else
    {
        $this->load->model('user_model');

        $email = $this->input->post('email');
        $password = $this->input->post('password');
        $type = $this->input->post('type');

        $user_data = $this->user_model->login_user($email, $password, $type);

        if($user_data)
        {
            $login_data = array(

                'user_data' => $user_data,
                'email'     => $email,
                'type'      => $type,
                'name'      => $name,
                'logged_in' => true

            );

            $this->session->set_userdata($login_data);

Моя модель

public function login_user($email, $password, $type)
{
    $this->db->where('email', $email);
    $this->db->where('type', $type);

    $result = $this->db->get('users');

    $db_password = $result->row('password');

    if(password_verify($password, $db_password))
    {
        return $result->row(0)->id;
    }
    else
    {
        return false;
    }
}

Я хочу сохранить все данные пользователя в сеансе после входа в систему. Как я могу это сделать?

1 Ответ

0 голосов
/ 21 апреля 2019

Вы близки к тому, что хотите. Самая большая проблема с этой линией

return $result->row(0)->id;

Потому что это возвращает только значение столбца 'id'. Исправьте это (и сделайте код более компактным), как это

public function login_user($email, $password, $type)
{
    $result = $this->db
        ->where(array('email' => $email, 'type' => $type))
        ->get('users')
        ->row(0); //$result is the whole row - all the columns

    if($result && password_verify($password, $result->password))
    {
        return $result;
    }

    return false;
}

Тогда важная часть контроллера использует получение всей строки с этим.

$user_data = $this->user_model->login_user($email, $password, $type);

if($user_data)
{
    $login_data = array(
        'user_data' => $user_data,  //all the columns from row(0)
        'email' => $user_data->email, //email column from row(0)
        'type' => $type,
        'name' => $user_data->name, // name column from row(0)
        'logged_in' => true
    );

    $this->session->set_userdata($login_data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...