Bonsoir,
Je rencontre un problème étrange que je n'arrive pas à résoudre sous CakePHP 2.0.
Quand on enregistre un utilisateur, nous sommes obligés de hasher le mot de passe manuellement et c'est à ce stade que ce rencontre mon soumis. CakePHP laisse le mot de passe tels quelle.  
AppController.php
<?php
class AppController extends Controller{
    public $components = array('Auth');
}
?>User.php
<?php
class User extends AppModel{
    public $validate = array(
        'username' => array(
            'isUnique' => array(
                'rule' => 'isUnique',
                'required' => true,
                'allowEmpty' => false,
                'message' => 'This username is not available'
            ),
            'between' => array(
                'rule' => array('between', 4, 30),
                'message' => 'The username must be between 4 and 30 characters'
            ),
        ),
        'password' => array(
            'alphaNumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'allowEmpty' => false,
                'message' => 'The password must contain letters and numbers only'
            ),
            'between' => array(
                'rule' => array('between', 8, 30),
                'message' => 'The password must be between 8 and 30 characters'
            ),
        ),
        'email' => array(
            'rule' => array('email', true),
            'required' => true,
            'allowEmpty' => false,
            'message' => 'You must enter a valid email'
        ),
        'avatar' => array(
            'rule' => array('url', true),
            'required' => true,
            'allowEmpty' => false,
            'message' => 'You must enter a valid url'
        ),
    );
    public function beforeSave(){
        $this->data'User']'password'] = AuthComponent::password($this->data'User']'password']);
        $this->data'User']'password_confirm'] = AuthComponent::password($this->data'User']'password_confirm']);
        return true;
    }
}
?>UsersController.php
<?php
class UsersController extends AppController{
    public $components = array('Session');
    public function beforeFilter(){
        $this->Auth->allow('register');
    }
    public function register(){
        $this->set('title_for_layout', 'Register');
        $this->set('active', 'register');
        $this->User->set($this->data);
        if($this->request->is('post')){
            if($this->User->validates()){
                if($this->request->data'User']'password'] == $this->request->data'User']'password_confirm']){
                    debug($this->data);
                }else{
                    $this->Session->setFlash('Password doesn\'t match', 'default', array(), 'password');
                }
            }else{
            }
        }
    }
}
?> 
  Tu as mis le hash dans le beforeSave mais tu ne sauvegarde l'utilisateur nulle part, il faut que tu appelles la method save() pour que ton beforeSave marche.
Grosso-modo comme ça :
<?php
class UsersController extends AppController{
    public $components = array('Session');
    public function beforeFilter(){
        $this->Auth->allow('register');
    }
    public function register(){
        $this->set('title_for_layout', 'Register');
        $this->set('active', 'register');
        $this->User->set($this->data);
        if($this->request->is('post')){
            if($this->User->validates()){
                if($this->request->data'User']'password'] == $this->request->data'User']'password_confirm']){
                    // On sauvegarde quand même pour que le beforeSave fonctionne 
                    if($this->User->save($this->request->data))
                    {
                         $this->Session->setFlash('Utilisateur sauvegardé');
                    }
                }else{
                    $this->Session->setFlash('Password doesn\'t match', 'default', array(), 'password');
                }
            }else{
            }
        }
    }
}
?>Et la si tu regardes ta base, tu verras que ton utilisateur aura son mot de pass hashé sauvegardé.
PS: je te déconseille de fermer le tag php en bas des pages "?>" ça apporte quelques erreurs sur certains frameworks et certains scripts.