Компонент CakePHP Authe разрешает проблему перенаправления - PullRequest
1 голос
/ 30 сентября 2011

У меня проблема с компонентом Auth при использовании $this->Auth->allow('index','view'); Я получаю / users / login привел к слишком большому количеству перенаправлений, когда я использую $this->Auth->allow('*'), он работает нормально. Я использую CakePHP 1.3.12 вот app_controller.php

class AppController extends Controller {
    var $components = array('Auth','Session');
    function beforeFilter(){    
         $this->Auth->allow('index','view');
    } 
}

Я изменил app_controller.php

class AppController extends Controller {
    var $components = array('Auth','Session');
    function beforeFilter(){    
        $this->Auth->allow(array('index','view','display'));
    }
}

users_controller.php

class UsersController extends AppController {

var $name = 'Users';

function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow(array('login','logout'));
}

function login() {
    if ($this->Session->read('Auth.User')) {
        $this->redirect('/', null, false);
    }
}

routes.php

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

есть предложения? Спасибо

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Не знаю, но вы можете проверить, есть ли у вас какие-либо действия с запросом.

"Если вы используете requestAction в вашем макете или элементах, вы должны разрешить эти действия, чтобы иметь возможность открыть логинстраница правильно. "http://book.cakephp.org/1.3/en/view/1257/allow

Это дало мне тупой долгое время.

Допустим, вы визуализируете элемент где-то в вашем шаблоне:

echo $this->element('comments');

И в представлениях / элементах /comments.ctp у вас есть что-то, что запрашивает действие, например

$comments = $this->requestAction('comments/index');
foreach($comments as $comment) {
 // print stuff
}

В вашем CommentsController вы должны:

function beforeFilter() {
    $this->Auth->allow('index');
}

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

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

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

это массив =)

$this->Auth->allow(array('index','view'));

вы получаете сообщение too many redirects, потому что действие / user / login недоступно. Таким образом, сервер пытается отобразить страницу входа, но не может, потому что обычные не подключенные пользователи не имеют доступа к / user / login. А когда у пользователя нет доступа к странице, сервер перенаправляет его на страницу входа ... так что вы видите, это бесконечный цикл.

Действие / user / login должно быть разрешено всем. Ваш Users контроллер должен выглядеть так:

class UsersController extends AppController {

var $name = 'Users';
function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow(array('login','logout'));
}

function login(){
    if ($this->Session->read('Auth.User')) {
        $this->redirect('/', null, false);
    }
}

    //if you're using prefix routes. 
function admin_login(){
    $this->redirect('/users/login');
}

если это не проблема, возможно, вы перенаправляете страницу в маршрутах. Php

Надеюсь, это поможет

0 голосов
/ 18 января 2012

вы делаете это неправильно. Как приложение может узнать, какое из ваших действий контроллера вы пытаетесь контролировать. Сделайте это из своего контроллера.

удалите это из приложения

$ this-> Auth-> allow (array ('index', 'view', 'display'));

попробуйте это в вашем контроллере приложения с необходимым изменением

        $this->Auth->loginError = "Wrong credentials. Please provide a valid username and password.";

        $this->Auth->authError = "You don't have sufficient privilege to access this resource.";

        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');

        $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');

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

сделать это из вашего пользовательского контроллера

$this->Auth->userModel = 'User';
$this->Auth->allow('*');

И при входе в систему ничего не делать, все ваши перенаправления и все будет делать с помощью контроллера приложения.

Если у вас есть какие-либоСомнения относительно этого письма мне

jafarkv9@gmail.com

...