CakePHP Войти Имя пользователя / Проверка пароля - PullRequest
1 голос
/ 30 ноября 2011

У меня есть ниже в моем users_controller, потому что есть дополнительная логика, необходимая для выполнения входа в систему, однако когда сделано в CakePHP, проверка по умолчанию останавливается, и поэтому я пытаюсь заставить его проверить поля имени пользователя и пароля перед проверкой учетной записи , Все отлично работает, но это. Я попытался добавить два оператора if (ниже), чтобы проверить, пусто ли имя пользователя / пароль, однако, как только страница загрузится, они будут пустыми и появится окно проверки.

Я в тупике, как этого добиться. Любая помощь будет принята с благодарностью.

    function login() {
    if($this->Auth->user()) {
        $this->redirect(array('controller'=>'shows'));
    }
    if(empty($this->data['User']['username'])) {
        $this->User->validationErrors['username'] = "Please enter a username";
    }
    if(empty($this->data['User']['password'])) {
        $this->User->validationErrors['password'] = "Please enter a password";
    }
    if(!empty($this->data['User']['username'])) {
        // unset unrequired validation rules
        unset($this->User->validate['username']['unique']);

        // validate form
        $this->User->set($this->data);
        if($this->User->validates()) {
            // update Last Login date
            $this->User->id = $this->User->_user['User']['id'];
            $this->User->saveField('last_login',date("Y-m-d H:i:s"));

            // save User to Session and redirect
            $this->Session->write('User', $this->User->_user);
            $this->Session->setFlash('You have successfully logged in.','default',array('class'=>'flash_green'));
            //$this->redirect(array('controller'=>'shows', 'admin'=>FALSE));
        } else {
            $this->Session->setFlash('Incorrect username/password combination.','default',array('class'=>'flash_red'));
            $this->redirect(array('controller'=>'users', 'action'=>'login', 'admin'=>FALSE));
        }
    }
}

users_controller beforeFilter ()

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

app_controller beforeFilter и компоненты

    var $components = array('Session', 'Auth' => array(
    'loginAction' => array('controller'=>'users','action'=>'login', 'admin'=>false),
    //'logoutRedirect' => array('controller'=>'users','action'=>'logout'),
    'loginRedirect' => array('controller'=>'shows', 'action'=>'index'),
    'autoRedirect' => false,
    'authorize' => 'controller')
);

function beforeFilter() {
    $this->Auth->allow('home');
    $this->set('admin', $this->_isAdmin());
    $this->set('logged_in', $this->_loggedIn());
    $this->set('users_username', $this->_usersUsername());
}

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Удалите приведенный ниже код из файла user_controller.php.

 else {
        $this->Session->setFlash('Incorrect username/password combination.','default',array('class'=>'flash_red'));
        $this->redirect(array('controller'=>'users', 'action'=>'login', 'admin'=>FALSE));
    }

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

0 голосов
/ 30 ноября 2011

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

Вы определенно не должны выполнять проверки! Empty в контроллере. В любом случае весь кодовый блок может быть уменьшен до ~ 6 строк. Большая часть этого должна идти в модель.

Проверьте этот плагин или посмотрите на его код, чтобы получить представление. https://github.com/CakeDC/users/

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