Ответы пользователя по тегу Технология единого входа
  • SSO и Yii: почему не работает простой пример?

    @evilJ0e
    Много ошибок, парень.

    Для начала укажи пустой шаблон. Тогда ты сможешь отправить необходимые заголовки:
    public $layout='//layouts/main';

    В стандарте прописано, что сообщение надо слать следующим образом:
    "data: сообщение\n\n"
    или
    "data: сообщение из двух строк\n"
    "data: сообщение из двух строк\n\n"

    Перепиши свою функцию, например, так:
    function sendMsg($msg)
    {
        echo "data: " . $msg . "\n\n";
        ob_flush();
        flush();
    }


    Еще, кажется, в контроллере необходим обязательный actionError().

    Вот мой рабочий код данного примера. Права доступа остались с прошлого проекта:
    class SiteController extends Controller
    {
        public $layout='//layouts/main';
    
        public function filters()
        {
            return array(
                'accessControl',
                'postOnly + delete',
            );
        }
    
         public function actions()
         {
              return array(
                  'page'=>array(
                       'class'=>'CViewAction',
                   ),
              );
         }
    
        public function accessRules() {
            return array(
                array('allow',
                    'actions' => array('stream'),
                    'users' => array('*'),
                ),
                array('allow',
                    'actions' => array('foo'),
                    'users' => array('@'),
                ),
                array('allow', 
                    'actions'=>array('foo'),
                    'users'=>array('admin'),
                ),
                array('deny', 
                    'users'=>array('*'),
                ),
            );
        }
    
        public function actionError()
        {
              if($error=Yii::app()->errorHandler->error)
              {
                   if(Yii::app()->request->isAjaxRequest)
    	              echo $error['message'];
    	    	else
    	              $this->render('error', $error);
    	    }
         }
    
        protected function sendMessage($msg)
        {
            echo "data: " . $msg . "\n\n";
            ob_flush();
            flush();
        }
    
        protected function sendResponse($status = 200, $body = '', $contentType = 'application/json', $cache = 'no-cache')
        {
            $statusHeader = 'HTTP/1.1 ' . $status;
            header( $statusHeader );
            header( 'Content-type: ' . $contentType );
            header( 'Cache-Control: ' . $cache );
    
            self::sendMessage( $body );
        }
    
        function actionStream()
        {
            $t = 'message';
    
            self::sendResponse( 200, $t, 'text/event-stream' );
        }
    }
    Ответ написан