Отменить перенаправление входа в систему - PullRequest
0 голосов
/ 03 января 2012

Просто начинаю изучать фреймворк CakePHP. Я использую компонент Auth, и все мои действия, которые требуют, чтобы пользователь вошел в систему, перенаправляют на пользователей / логин, а не на логин / логин (мой нестандартный контроллер). Кто-нибудь знает, где я могу изменить эту настройку? Кроме того, как компонент auth работает на нескольких контроллерах? Придется ли мне переопределять это автоматическое перенаправление в каждом контроллере?

  <?php
  class LoginController extends AppController {

    public $name = 'Login';

    public $components = array('Auth');

    public $helpers = array('Html', 'Form' );

    function beforeFilter() {
            // tell Auth not to check authentication when doing the 'register' action
            $this->Auth->allow('register');
            $this->Auth->userModel = 'Login';
    }

    function register() {
            if (!empty($this->data)){
                    if ($this->Login->save($this->params['data'])) {
                            $this->flash('Your registration information was accepted. Welcome!');
                            $this->Auth->login($this->data);
                            $this->redirect(array('action' => 'index'));
                    } else {
                            $this->flash('There was a problem with your registration', '/login/knownusers');
                     }
             }      

    }

    function createprofile() {



    }

    function knownusers() {
            $this->set('knownusers', $this->Login->find(
                    'all',
                    array(
                             'fields' => array('id','username', 'password', 'fk_profile_id'),


                            $this->redirect(array('action' => 'index'));
                    } else {
                            $this->flash('There was a problem with your registration', '/login/knownusers');
                     }
             }      

    }

    function createprofile() {



    }

    function knownusers() {
            $this->set('knownusers', $this->Login->find(
                    'all',
                    array(
                             'fields' => array('id','username', 'password', 'fk_profile_id'),
                            'order' => 'id DESC'  
                    )
            ));
    }       

    function login() {
    }

    function logout() {
            $this->redirect($this->Auth->logout('login/login'));
    }

 }
 ?>

Ответы [ 2 ]

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

Если весь ваш веб-сайт должен быть защищен, тогда вы можете определить Auth компонент в вашем AppController, который заставит эти правила применяться ко всем контроллерам, которые наследуются от этого объекта (т.е. ко всем контроллерам на вашем сайте).

Документация по аутентификации CakePHP содержит все параметры, необходимые для выполнения того, что вы пытаетесь сделать. Вы должны быть в состоянии определить перенаправление входа в систему при настройке компонента Auth:

public $components = array(
    'Auth' => array(
        'loginAction' => array('controller' => 'User', 'action' => 'login')
    )
);
1 голос
/ 03 января 2012

Вы можете поместить этот оператор в beforeFilter ()

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

Также вам не нужно определять это в каждом контроллере.Если есть какая-то логика, которую вам нужно выполнить для каждого контроллера, я бы вставил ее в beforeFilter () AppController ...

...