Компонент Cakephp Auth - цикл перенаправления на главную страницу - PullRequest
2 голосов
/ 25 января 2012

Я хочу иметь форму входа на моей домашней странице, зарегистрированные пользователи должны быть перенаправлены на users / index

с приведенным ниже кодом, моя домашняя страница перейдет на цикл перенаправления
Может кто-нибудь сказать мне, где проблема ??

Примечание: - на самом деле это прекрасно работает, если я изменю строку на

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

Контроллер приложения

  public function beforeFilter(){
            $this->Auth->autoRedirect = false;
            $this->Auth->loginAction = array('controller' => './', 'action' => 'index');
            $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'index');
            $this->Auth->logoutRedirect = array('controller' => './', 'action' => './');
            $this->Auth->authorize = 'controller';
            $this->Auth->authError= 'You need permissions to access this page';
            $this->Auth->allow('index');
            $this->set('Auth',$this->Auth);

        }

UsersController

public function login(){
        $id = $this->Auth->user('id');
        if(empty($id)){
            if($this->request->is('post')){
                if($this->Auth->login()){
                    $this->redirect($this->Auth->redirect());   
                }else{
                    $this->Session->setFlash('Invalid Username or password');
                }
            }
        }else{
            $this->redirect(array('action'=>'index'));
        }   
    }

Спасибо за помощь ...

Ответы [ 3 ]

1 голос
/ 25 января 2012

Вы в значительной степени ответили на свой вопрос здесь:

Примечание: - На самом деле это прекрасно работает, если я изменю строку на

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

Действительно, это будет работать, и так оно и должно выглядеть.Прямо сейчас вы сообщаете компоненту auth, что ваше loginAction (действие, которое содержит логику входа в систему) является действием index контроллера ./ (которого даже не существует).Я предполагаю, что вы путаете это с переменной loginRedirect, которая служит для настройки перехода страницы после успешной аутентификации.

0 голосов
/ 05 июня 2014

с использованием $this->requestAction(anotherController/action); в представлении может вызвать другой контроллер-> действие. Вы должны убедиться, что другое действие controller-> имеет необходимые разрешения. или вы получите цикл перенаправления.

решить эту проблему, добавив $this->auth->allow('action name'); на страницу другого контроллера в обратном вызове beforeFilter ().

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

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

В вашем файле app_controller добавьтепосле начала вашей функции beforeFilter ()

function beforeFilter(){
    //Check if user was able to log in thru Auth using your form in the homepage
    if($this->isLoggedIn() == TRUE){
        $this->layout = 'default'
    }else{
        // You can created this layout with a login form and 
        // whatever else you need except <?php echo $content_for_layout; ?>
        // Any registered user will be allowed to login using the form
        // and continue on to your site using the default layout
        // But it guarantees no one else can see your default site
        $this->layout = "unregistered_user"
    }
}

На вашем App_controller.php вы можете создать эту функцию

function isLoggedIn(){
    // You can also use $this->Auth->user directly in your App's beforeFilter()
    // But I just like to have functions so I can reuse
    if($this->Auth->user()){
       $loggedin= TRUE;
    }else{
        $loggedin= FALSE;
    }
    return $loggedin;
}

У меня есть нечто похожее на мой сайт, но оно используется только в том случае, еслив режиме обслуживания.Я все еще развиваю свой сайт.Единственная проблема, с которой я столкнулся при таком способе, на которую у меня пока нет времени / необходимости смотреть, состоит в том, что мои ошибки не отправляются в нужный мне макет.Предположим, что пользователь вводит http://www.mydomain.com/inexistentpage, а затем торт переносит их в мой макет по умолчанию.Это может быть легко исправить, но у меня пока нет времени, чтобы сделать это.

ПРИМЕЧАНИЕ: я быстро сделал это с головы до головы, и из-за этого этот код не проверен.Однако, если у вас есть какие-либо проблемы, пожалуйста, дайте мне знать, и я протестирую это и отправлю обратно.

...