Обновление базы данных по месту назначения - PullRequest
0 голосов
/ 19 января 2020

Во-первых, я Laravel программист, пытающийся понять эту старую систему codeginiter. Мне нужно, чтобы один и тот же пользователь не входил в систему более одного раза. Мне просто нужно, чтобы после входа никто не мог войти в систему с этой учетной записью.

Мне только что удалось это сделать, изменив функцию logout () в приложении / controllers / backend / Auth. php

public function logout() {
    $logout = $this->ion_auth->logout();

    // 20200117 2355 : agrego |--
    $user_x = $this->codegen_model->row('users', '*', "id='" . $this->session->userdata('user_id') . "'");
    if( !is_null($user_x) ){
        $data = array(
        'ip_address' => (binary)''
    );
    $this->codegen_model->edit( 'users', $data, 'id', $user_x->id );
    }
    // --|

    redirect(base_url() . 'web_ctrl', 'refresh');
} 

и функция username_check в application / models / ion_auth_model. php

/**
  * Checks username
  *
  * @return bool
  * @author Mathew
**/
public function username_check($username = '')
{
    $this->trigger_events('username_check');

    if (empty($username))
    {
    return FALSE;
    }

    // 20200117 2355 : agrego |--
    $user_x = $this->codegen_model->row('users', '*', "username='" . $username . "'");
    if (!is_null($user_x)) {
        if( $user_x->ip_address != (binary)'' )
        return FALSE;
    else {
        $data = array(
            'ip_address' => (binary) inet_pton($this->input->ip_address())
        );
        $this->codegen_model->edit('users', $data, 'id', $user_x->id);
    }
    }
    // --|

    $this->trigger_events('extra_where');
    return $this->db->where('username', $username)->count_all_results($this->tables['users']) > 0;
    } 

Я просто оставил пользователя для входа в систему, если «ip_address» в таблице users пуст и заблокирован (возвращает FALSE) в username_check, если нет.

Это работает, но завершается неудачно по истечении сеанса (application / controllers / backend / Auth. php logout () не запускается) вместо библиотек / Session / MY_Session sess_destroy () запускается, но я не может изменить базу данных оттуда:

// 20200117 2355 : agrego |--

class MY_Session extends CI_Session{

    public function __construct() {
        parent::__construct();
    }

    function sess_destroy() {

        $data = array(
            'ip_address' => (string) ''
        );
        $this->db->update($this->tables['users'], $data, array('id' => $this->session->userdata('user_id')));

        //call the parent
        parent::sess_destroy();
    }

}

// --|

Говорит, что $ this -> db is null ...

Итак, как я могу изменить базу данных по истечении сеанса?

1 Ответ

1 голос
/ 21 января 2020

похоже, что вы используете скрипт ion_auth ... попробуйте поместить свой скрипт в библиотеку ion auth под функцией выхода из системы ... это зависит от того, как вы устанавливаете скрипт ion_auth ... если вы устанавливаете его как стороннее приложение, чем вы можете найти его в папке Third_party ... найдите папку библиотеки, чем вы можете найти библиотеку ion auth в ней ... откройте ее и найдите функцию выхода из системы, чем поместите ваш скрипт перед вызовом sess_destroy ()

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