Компонент авторизации cakePHP не работает - PullRequest
0 голосов
/ 25 октября 2010

У меня проблема с аутентификацией торта, из-за которой я просто не могу пройти (я отлаживал и пробовал разные учебники в течение последних двух дней).Насколько я вижу, это должно быть очень просто, проблема в том, что всякий раз, когда я пытаюсь войти в систему, он просто обновляет страницу входа.Я не могу за свою жизнь понять, почему!Мой единственный вывод заключается в том, что должно быть что-то (основное), которое учебники считают само собой разумеющимся, что я пропустил.

Вот несколько фрагментов:

users_controller.php

class UsersController extends AppController {

    var $name = 'Users';

    function beforeFiler() {
        parent::beforeFilter();
    }
    function login() {
    }

    function logout() {
        $this->Session->setFlash('You have successfully logged out.');
        $this->redirect($this->Auth->logout());
    }
}

app_controller.php

class AppController extends Controller {

    var $helpers = array('Html','Form','Javascript');
    var $components = array('Auth');

    function beforeFilter() {

        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
        $this->Auth->loginRedirect = array('controller' => 'contents', 'action' => 'index');
        $this->Auth->logoutRedirect = array('controller' => 'contents', 'action' => 'view');
        $this->Auth->loginError = 'Something went wrong';
        $this->Auth->allow('register', 'view');
        $this->Auth->authorize = 'controller';
        $this->set('loggedIn', $this->Auth->user('id'));
    }

    function isAuthorized() {
        return true;
    }
}

login.ctp

<div class="midCol short">
    <h3>Login</h3>
    <div class="loginBox">
    <?php e($form->create('User', array('controller'=>'users','action'=>'login')));?>
        <?php
        echo $this->Form->input('username');
        echo $this->Form->input('password');
        e($this->Form->end(array('label'=>'Login', 'class'=>'loginButton button png')));?>
    </div>
</div>

Любая помощь будет принята с благодарностью, это заставляет меня рвать на себе волосы!

Ответы [ 6 ]

2 голосов
/ 21 июня 2012

Только для документации, так как у меня были трудности с поиском ответа на CakePHP 2.x в Интернете.Этот материал должен быть «правильным» для использования проверки подлинности формы:

  • Конфигурация должна быть правильной, например, в вашем UsersController (конфигурация полей действительно требуется только тогда, когда имена отличаютсяБД):

    public $components = array(
        'Auth' => array(
            'authenticate' => array(
                'Form' => array(
                    'fields' => array(
                        'username' => 'username',
                        'password' => 'password'
                    ),
                )
            )
        )
    );
    
  • Вы должны использовать помощник по формам: Form-> create добавляет скрытое поле ввода («post»), а также генерируются имена полей вводас помощью Form-> input () следуйте соглашению, которое ожидает компонент Auth.

  • User-> login не должен передавать пользовательские данные в Auth-> login ().Компонент Auth будет принимать данные авторизации из формы (= запрос).

0 голосов
/ 06 апреля 2015

Поправьте меня, если я ошибаюсь, но в функции входа в систему не должно быть кода для перенаправления или чего-то еще

function login() {
}

, если оно не похоже на

public function login()
{
if ($this->request->is('post')) {
    $user = $this->Auth->identify();
    if ($user) {
        $this->Auth->setUser($user);
        return $this->redirect($this->Auth->redirectUrl());
    }
    $this->Flash->error(__('Invalid username or password, try again'));
    }
}
0 голосов
/ 14 ноября 2013

Собираюсь бросить что-то здесь. У меня была почти неразрешимая проблема с аутентификацией CakePHP. Закончив с отладкой, я обнаружил, что во время подготовки базы данных я создал поле для пароля, в котором можно было хранить пароли нормального размера ... но .... когда вы начинаете применять хеширование паролей, вам нужно гораздо больше , Мой код был в порядке, но мне пришлось добавить еще много места в поле VARCHAR для пароля, прежде чем я смог войти в систему. Если у вас возникли проблемы с аутентификацией - убедитесь, что поле вашего пароля имеет соответствующий размер и не усекается мой был. У меня ушел целый день, чтобы найти это. DOH!

0 голосов
/ 02 сентября 2011

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

0 голосов
/ 25 октября 2010

Компонент Auth будет перенаправлять на страницу до того, как вы войдете в систему. Если эта страница была страницей входа, именно туда она будет перенаправлена

Когда вы тестируете, вполне вероятно, что вы обновляете страницу входа в систему, поэтому при успешном входе вы будете перенаправлены. Вы можете проверить это, попытавшись выполнить действие, защищенное аутентификацией, после входа в систему.

Это также доставляет мне много головной боли - я думаю, что текущая функциональность компонента немного неуклюжа в этом отношении.

0 голосов
/ 25 октября 2010

Спасибо за совет, но в итоге я его пересмотрел и начал заново строить с нуля. Не совсем уверен, почему он изначально ломался, возможно, не вызывая встроенные функции с американским английским!

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