Последняя стабильная версия: 1.1.9

Рецепты

Система Orphus

HTTPS и Yii

Задача: использовать в приложении настройку, включающую для определённого пользователя использование HTTPS.

Первым делом реализуем удобное получение самой настройки из базы через Yii::app()->user->useHttps. Для этого расширим CWebUser:

class WebUser extends CWebUser {
    private $_model = null;
 
    function getUseHttps() {
        if($user = $this->getModel()){
            // в таблице User есть поле useHttps
            return $user->useHttps;
        }
    }
 
    private function getModel(){
        if($this->_model === null){
            $this->_model = User::model()->findByPk($this->id);
        }
        return $this->_model;
    }
}

Чтобы приложение использовало наш класс WebUser, необходимо сконфигурировать компонент user:

'user'=>array(
    'class' => 'WebUser',
    //
),

Подсказка: Точно таким же способом можно переопределить любой компонент Yii.

Далее реализуем проверку настройки и установку нужного режима работы. Для этого создадим базовый контроллер:

class BaseController extends CController {
    function init(){
        // Если параметр не пуст и текущий режим не соответствует выставленному в настройках
        if(
            !empty(Yii::app()->user->useHttps) &&
            Yii::app()->request->isSecureConnection!==Yii::app()->user->useHttps
        ){
            $schema = 'http://';
            if(Yii::app()->user->useHttps){
                $schema = 'https://';
            }
 
            // получим URL с нужной схемой
            $url = $schema.Yii::app()->request->serverName.Yii::app()->request->url;
 
            // перенаправим на него пользователя
            Yii::app()->request->redirect($url, true);
        }
    }
}

Все контроллеры нашего приложения необходимо наследовать от базового.

Подсказка: При использовании nginx необходимо задать fastcgi_param HTTPS on; для всех хостов с HTTPS.