Cakephp Auth hashPasswords переписать Проблемы - PullRequest
1 голос
/ 29 июня 2011

Я использовал этот учебник , чтобы переписать мои функции входа / выхода для обработки аутентификации и сопоставления паролей в модели.

Теперь он отлично добавляет пользователя, но при входе в системуполя имени пользователя / пароля отклоняются.Похоже, что функция входа в систему ищет хешированный пароль, отличный от того, который хранит моя новая функция hashPasswords ().Любые предложения о том, в чем может быть проблема?

Это довольно стандартная установка.Спасибо за любую помощь!

Соответствующие разделы кода:

Модель пользователя:

var $validate = array(
    'password' => array(
        'The Password must be filled' =>array(            
            'rule' => 'notEmpty',
            'message' => 'Please supply a valid password.'
        ),
        'The Password must be between 5 and 15 characters' => array(
            'rule' => array('between', 5, 15),
            'message' => 'The password must be between 5 and 15 characters.'
        ),
        'The passwords do not match' => array(
            'rule' => 'matchPasswords',
            'message' => 'The passwords do not match.'
        )       
    ),

function hashPasswords($data) {
    if (isset($this->data['User']['password'])) {
        $this->data['User']['password'] = Security::hash($this->data['User']['password'], NULL, TRUE);
        return $data;
    }
    return $data;
}

function beforeSave() {
    $this->hashPasswords(NULL, TRUE);
    return TRUE;
}

Контроллер пользователя:

function beforeFilter() {
    parent::beforeFilter();
    if ($this->action == 'add' || $this->action == 'edit' ) {
        $this->Auth->authenticate = $this->User;
    }
}


function add() {
    if (!empty($this->data)) {

        if ($this->User->save($this->data)) {
                $this->Session->setFlash('Your Account Has Been Created.');
                $this->redirect(array('action' => 'homepage'));
        }
    }
}

function login() {

}   

1 Ответ

0 голосов
/ 22 июля 2011

Я не видел видео, но -

Когда $ this-> data ['User'] имеет массив 'username' и 'password' и используется для сохранения пользовательского торта - торт фактически хэширует пароль. Возможно, что ваш хешированный пароль снова будет хэширован - посмотрите документацию на торт hashPassword

Что касается сопоставления паролей - на самом деле гораздо проще сделать это на стороне клиента, где они не хэшированы (существует множество функций Jquery, которые проверяют формы). Вы даже можете написать простое:

if($this->data['User']['password'] != $this->data['User']['password_conf']{
    $this->Session->setFlash('Passwords do not match');
} else {
    //save user etc
}

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

Кроме того - у всех есть совершенно разные способы аутентификации пользователей - прежде всего, прочитайте документацию - есть превосходное учебное пособие для простого приложения с проверкой подлинности / ACL, которое проходит около 30 минут и должно быть любым отправная точка.

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