Cakephp auth логин проблема? - PullRequest
1 голос
/ 07 марта 2011

В моей базе данных есть таблица пользователей, и одна запись - пользователь, пароль для этого хэшируется с помощью md5.

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

Вот мой контроллер:

class UsersController extends AppController {

    var $name = 'Users';

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



     function login() {
            //debug($this->data);
           if ($this->Session->read('Auth.User')) {
            $this->Session->setFlash('You are logged in!');                
        }
    }

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

и из appControler

class AppController extends Controller {

    var $components = array('Auth', 'Session');

    function beforeFilter() {
        //debug($this->data);
        //Security::setHash('md5');
        $this->Auth->allow('admin_index', 'index', 'login', 'logout');
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'index');
        $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout');
        $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'index');
    }

}

login.ctp:

<div class="login">
    <?
    $session->flash('auth');
    echo $form->create('User', array('action' => 'login'));
    echo $form->inputs(array('legend' => __('Login', true), 'username', 'password'));
    echo $form->end('Login');
    ?>
</div> 

вот сообщения отладки из app_controller

Array
(
    [User] => Array
        (
            [username] => admin
            [password] => pass
        )

)

и отладка сообщения от контроллера пользователя:

Array
(
    [User] => Array
        (
            [username] => admin
            [password] => 8e2665a3fe6983fa38464685ac4a3d9c93a3d301
  //this is not empty anymore but it is not same as in database
        )

)

Вот SQL-код, это хорошо, но хэш-пароль пользователя неверен.

SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`created` FROM `users` AS `User` WHERE `User`.`username` = 'admin' AND `User`.`password` = '09b98f2308740bf305ce1e1097d02ded' LIMIT 1

В чем может быть проблема? Я новичок в cakephp. Tnx заранее

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

user303832,

Вы должны добавить login, logout к вашему набору разрешенных действий через $this->Auth->allow(.

Edit0: Другая частая точка сбоя - это то, что поле подтверждения пароля пропускается, что приводит к повторному хешированию и сохранению в базе данных хэша более раннего пароля. Поскольку пароль теперь дважды хешируется, пользователь больше не может войти в систему. Это настолько распространено, что у него есть собственное имя (ниндзя) - Ü.

Edit1: Мои глубокие извинения: Пожалуйста, измените свою строку на:

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

и

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

Кроме того, убедитесь, что ваша таблица базы данных настроена на использование в качестве пароля символа (40) (@haprax: это то, что книга предлагает даже для sha1).

1 голос
/ 09 марта 2011

Не пытайтесь использовать какой-либо другой формат хеширования, потому что cakephp не упоминает какой-либо конкретный формат хеширования. По моему мнению, Cakephp конвертирует его в соответствии со значением security.Salt и расшифровывает значение, которое мы изменяем в файле cofig файла CakePHP.

Итак, Solution - создать использование после реализации компонента auth, а затем Cake php создаст пароль в своем собственном формате и попытается войти в систему.

...