CakePHP, если сеанс не существует, отображает другой макет и вид - PullRequest
1 голос
/ 03 сентября 2011

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

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

У меня есть рабочийСистема на месте и для предотвращения доступа я делаю проверку в AppController, чтобы все запросы сначала проверяли, существует ли мой сеанс:

public function beforeRender()
{
    if ($this->Session->check('client') != true)
    {
        $this->layout = 'client_login'; 
        $this->render = 'pages/client_login';
    }
}

Бит разметки работает нормально , поэтому он понимает сеанс, но он не показывает мой вид входа в систему клиента, который имеет простую форму входа в систему, поэтому он не выполняет визуализацию должным образом.Есть идеи почему бы и нет?И любые лучшие идеи, чтобы показать макет и просмотреть все действия на сайте, если этот сеанс не существует.

Ответы [ 3 ]

2 голосов
/ 04 сентября 2011

'render' - это функция, а не свойство. Так что ваш код, вероятно, должен быть:

$this->render('pages/client_login');

edit: кстати, этот код не может быть помещен в обратный вызов beforeRender (), потому что это приведет к бесконечному циклу (render () поднимается beforeRender ()).

beforeFilter () определенно будет лучшим местом.

function beforeFilter()
{
    if ($this->Session->check('client') != true)
    {
        $this->autoRender = false;
        $this->layout = 'client_login';
        $this->render('/pages/client_login');
    }
}

EDIT

Как объяснено в моих комментариях, явный вызов метода render () в методе PagesController-> display () запрещает работу, которую вы хотите выполнять, когда вы находитесь на URL-адресе, использующем PagesController.

Подумав немного о ваших потребностях, я вижу два решения.

Если вам нужен простой способ временной защиты вашего сайта без изменения кода приложения, вы можете использовать Apache для защиты доступа через .htaccess. Обычная аутентификация или, может быть, фильтр по IP или домену может помочь вам в вашем случае. См http://httpd.apache.org/docs/2.0/howto/auth.html

Если вы хотите использовать Cake, потому что у вас уже есть настроенная система аутентификации, которая заполняет сеанс, вы можете использовать компонент Auth только для предоставления или запрета доступа. В вашем AppController у вас может быть что-то вроде:

function beforeFilter()
{
    $this->Auth->loginAction = '/pages/client_login';

    if($this->Session->check('client'))
    {
        $this->Auth->allow('*');
    }
}
0 голосов
/ 05 сентября 2011

В этом случае я обычно использую обычную http-аутентификацию Защита контента с помощью обычной аутентификации

Вы добавляете следующие директивы в .htaccess, который находится в каталоге над папкой вашего приложения (для получения дополнительной информации прочитайте 1 )

AuthUserFile    /path/to/your/folder/.htpasswd
AuthGroupFile   /dev/null
AuthName    Administration
AuthType    Basic

Создайте файл .htpasswd в том же каталоге с парами логин / пароль, используйте инструмент ниже

http://www.htaccesstools.com/htpasswd-generator/

0 голосов
/ 03 сентября 2011

Попробуйте это: Session-> read ('client')) { // клиентская сессия существует } еще { // клиентская сессия не существует }

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