Устранение неполадок в компоненте аутентификации Cakephp, не разрешающем разрешенные действия - PullRequest
0 голосов
/ 29 августа 2011

2 сентября обновление:

Это стало очень трудной головоломкой для решения. Настройка базовой аутентификации, а это все, чего я хочу, должно включать очень мало шагов. Я провел много тестов, добавляя и удаляя код, просматривая руководство по тортам, читая учебники и шаг за шагом просматривая поваренную книгу по разработке приложений cakePHP 1.3 от Mariano Iglesias - хорошая книга. http://goo.gl/93BGw

Но проблема, с которой я все еще сталкиваюсь, заключается в том, что контроллер приложения - это единственное место, где работают «разрешенные» действия. В отдельных контроллерах родитель: beforeFilter не распознается, и я перенаправлен обратно на страницу входа пользователей.

Любая помощь с этим действительно приветствуется. Что мне интересно, так это то, как я могу отладить этот тип проблемы. Есть ли другие параметры конфигурации, на которые мне следует обратить внимание, например, «префиксная маршрутизация»?

=======================

Обновление 1 сентября:

После многих испытаний возникает проблема в том, что «before: filter» в отдельных контроллерах не распознается. Пример в пост-контроллере:

    public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow = array('edit'); 
}

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

======================= Оригинальный вопрос.

Я использую компонент авторизации Cakephp для управления разделом администратора. Это использует версию 1.3.11

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

Вот что в контроллере приложения:

class AppController extends Controller {

var $components  = array(
'Auth' => array(
'authorize' => 'controller'
),
'Session',
'RequestHandler'
);

public function isAuthorized() { 
return true; 
}

function beforeFilter(){
    $this->Auth->authorize = 'controller';
    $this->Auth->fields = array('username' => 'username', 'password' => 'password');
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->authError = 'Please login to view that page ';
    $this->Auth->loginError =' The user name or password you entered did not work, please try again ' ; 
            $this->Auth->allow('display');
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout'); 
    $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display', 'home');     
}

Вот что в контроллере пользователя: класс UsersController расширяет AppController {

var $name = 'Users';

function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow = array('add');  
}

Это то, что находится в контроллере сообщений:

class PostsController extends AppController {

var $name = 'Posts';
var $components = array('Session','RequestHandler', 'Email');   

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow = array('edit'); 
}

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

Я попытался использовать $ this-session ('destroy'); в действии выхода из системы, но когда я это сделал, разрешенные действия больше не работали.

Имеет ли это смысл? Разве разрешенные действия не должны быть независимыми от текущего сеанса?

Спасибо, Пол

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Убедитесь, что вы не используете requestAction ни в одном из ваших элементов или представлений, убедитесь, что действия, вызываемые requestAction, тоже разрешены .... это должно исправить это.

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

Для случая, когда вы выходите из системы, и я все еще могу получить доступ к разделу администратора: logout () должен иметь $this->redirect($this->Auth->logout()); Он должен очищать данные сеанса аутентификации.

Вот что я предлагаю для beforeFilter () в appcontroller:

function beforeFilter(){
   $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');
}

и для контроллера страниц: $this->Auth->allow('display', 'view');

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