Codeigniter: эффективное использование собственного MY_Controller для аутентификации пользователя - передача переменных в модели и т. Д. - PullRequest
1 голос
/ 09 августа 2011

Я использую собственный MY_Controller для аутентификации пользователей на моем сайте Codeigniter.

Я использую $this->load->vars($data); таким образом, чтобы я мог получить доступ к информации пользователей в представлениях.

Мой первый вопрос: разрешает ли $this->load->vars($data); доступ в моделях, и если да, то как - я не смог найти никакой информации. Если нет, то как я могу получить имя пользователя, зарегистрированного в системе, для моих моделей, не пропуская его каждый раз через контроллер?

Во-вторых ... если пользователь не залогинен, я перенаправляю его redirect(base_url() . 'account/login');

Это прекрасно работает, за исключением того, что мой контроллер учетной записи также расширяет MY_Controller, он застревает в бесконечном цикле перенаправления. Я не могу просто расширить пользовательский контроллер для этой страницы, но не вижу причин, по которым вошедший в систему пользователь по-прежнему не может просматривать страницу входа в систему ... есть идеи?

Наконец ... если пользователь вошел в систему, $user['username'] определяется в моих представлениях. Если пользователь не вошел в систему, он не определен.

Таким образом, если у меня есть if($user['username']!=''){ в моем коде, когда пользователь вошел в систему, все в порядке, и код выполняется, однако, когда ни один пользователь не вошел в систему, появляются ошибки, связанные с неопределенной переменной, используемой в if заявление ...

Codeigniter сложно ..

Что здесь за работа?

Большое спасибо !!

Ответы [ 2 ]

1 голос
/ 09 августа 2011

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

Чтобы проверить, вошел ли пользователь в систему, вы можете написать функцию-привратник и поместить ее в конструкцию контроллеров для защиты контроллеров (и, следовательно, представлений).Что-то вроде;

function gatekeeper()
{
    if (!isset($this->session->item('username')) || !$this->session->item('username'))
    {
        redirect('/account/login);
    }
}
1 голос
/ 09 августа 2011

Я бы посоветовал сохранить пользовательские данные для текущего вошедшего в систему пользователя в сеансе, чтобы вам не нужно было запрашивать его и каждый раз передавать его представлению.Вы можете получить доступ к данным сеанса в контроллерах, представлениях и моделях с помощью $this->session->userdata('your_userdata_var_name');.

. Причина, по которой $user['username'] отображает ошибку, возможно, заключается в том, что она полностью удалена, а не установлена ​​в пустую строку (''), в этом случае вы пытаетесь получить доступ к неопределенному ключу массива.

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