Как настроить постоянные логины в codeigniter?

Я новичок в среде codeigniter, и мне любопытно, как настроить процесс для обработки постоянных входов в систему. Я переношу существующий сайт на codeigniter, и все уже настроено, включая создание файлов cookie, сохранение и обновление токенов в базе данных, средние рекомендации для постоянных входов в систему.

В чем я не уверен, так как я новичок в codeigniter (и это, вероятно, окажется довольно простым, по крайней мере, я на это надеюсь), так это как обрабатывать проверку файла cookie в системе пользователей? В старом приложении я написал функцию под названием «create_user_session()», которую я вызывал вверху каждой страницы сайта. Этот сеанс проверял, вошел ли пользователь в систему, если нет, то проверял, существует ли файл cookie на компьютере пользователя, и если да, использовал токен в файле cookie для входа пользователя.

Мой вопрос: где в codeigniter я должен настроить этот процесс? Я предполагаю, что есть способ справиться с этой ситуацией без вызова функции create_user_session() в каждом из моих контроллеров... по крайней мере, я на это надеюсь. Любое понимание того, как справиться с этой ситуацией, очень ценится! :)

*РЕДАКТИРОВАТЬ Я планирую иметь контроллер сеанса, который будет использоваться для обработки доступа к моделям, необходимым для входа и выхода пользователя, регистрации пользователей, удаления пользователей и т. д.


person whitwhoa    schedule 16.09.2013    source источник
comment
Вы смотрели в сессионную библиотеку? ellislab.com/codeigniter/user-guide/libraries/sessions.html   -  person stormdrain    schedule 16.09.2013
comment
Я только что прочитал эту документацию, и если я правильно понимаю, когда вы автоматически загружаете кодировщик класса сеанса, он знает, что нужно выполнять задачи обработки сеанса каждый раз, когда запрашивается страница? Если это так, то должен ли я расширять класс сеанса, чтобы использовать мою постоянную функцию входа в систему?   -  person whitwhoa    schedule 16.09.2013
comment
Смотрите ответ. Я бы рекомендовал расширить контроллер вместо сеансовой библиотеки.   -  person stormdrain    schedule 16.09.2013


Ответы (2)


Предполагая, что ваша «функция постоянного входа» просто автоматически регистрирует пользователей, у которых есть файл cookie/сеанс, библиотека сеансов CodeIgniter справится с этим за вас.

Если вы автоматически загружаете библиотеку сеансов, CI будет обновлять сеанс при каждой загрузке страницы.

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

application/core/MY_Controller.php

class MY_Controller extends CI_Controller{
    public function __construct() {
        parent::__construct();
        if($this->session->userdata('session_id') == FALSE) {
            redirect('/login');
        }
    }
}

Контроллеры:

требуется авторизация:

application/controllers/Whatever.php

class Whatever extends MY_Controller {

    // have to be logged in to see anything in here

}   

авторизация не требуется:

application/controllers/Login.php

class Login extends CI_Controller{

    // don't have to be logged in to see stuff here since
    // we're extending CI_Controller and not MY_Controller

}
person stormdrain    schedule 16.09.2013
comment
Должен ли метод __construct() включать parent::construct();? Я сравниваю ваш ответ с ответом jonixj и вижу, где он вызывал метод построения метода CI_Controller при расширении класса, а затем вызывал метод построения расширенного класса в каждом контроллере, который его расширил? - person whitwhoa; 16.09.2013
comment
Да извини. Бросьте его туда, иначе остальная часть CI будет недоступна: / Вам не нужны function __construct(){} в контроллерах, если вы не хотите создавать свой собственный конструктор для этого контроллера. См. ellislab.com/codeigniter/user-guide/general/ - person stormdrain; 16.09.2013

Вместо того, чтобы проверять куки в каждом контроллере, вы должны создать MY_Controller.php в основном каталоге и позволить всем контроллерам в вашем приложении расширяться от этого контроллера.

Это очень удобно для аутентификации, а также для многих других вещей, которые вы не хотите повторять в своем приложении.

Например:

файл: ядро/MY_Controller.php

class MY_Controller extends CI__Controller {
    function construct()
    {
        parent::construct();
        create_user_session();
    }
}

затем позвольте всем вашим контроллерам расширяться от вашего MY_Controller вместо CI_Controller:

class Users extends MY_Controller {
    function construct()
    {
        parent::construct();
        [...]
    }

    [...]
} 
person jonixj    schedule 16.09.2013