User.php //Model
/**
* Faz a validação da action change_own_password
* @return $this->validates retorna o validates do framework
*/
function newPasswordValidate() {
/**
* Array com os campos a serem validados
* @var array
*/
$validateNewPasswordFields = array(
'password'=>array(
'notEmpty'=>array(
'rule' => 'notEmpty',
'message'=> 'Campo obrigatório.',
),
'minLength' => array(
'rule' => array('minLength', 5),
'message' => 'A senha deve ter no mínimo 5 caracteres.',
),
'matchActualPasswd' => array(
'rule' => array('verifyActualPasswd'),
'message' => 'Senha atual não confere'
)
),
'new_password' => array(
'notEmpty'=>array(
'rule' => 'notEmpty',
'message'=> 'Campo obrigatório.',
),
'minLength' => array(
'rule' => array('minLength', 5),
'message' => 'A senha deve ter no mínimo 5 caracteres.',
),
'matchNewPassword' => array(
'rule' => array('verifyNewPasswd'),
'message' => 'As senhas fornecidas não são iguais.',
)
),
'confirm_new_password' => array(
'notEmpty'=>array(
'rule' => 'notEmpty',
'message'=> 'Campo obrigatório.',
),
'minLength' => array(
'rule' => array('minLength', 5),
'message' => 'A senha deve ter no mínimo 5 caracteres.',
),
'matchNewPassword' => array(
'rule' => array('verifyNewPasswd'),
'message' => 'As senhas fornecidas não são iguais.',
)
),
);
// seta no array validate os campos a serem validados
$this->validate = $validateNewPasswordFields;
// retorna o validates() do framework
return $this->validates();
}
/**
* Funcao para verificar se a senha digitada no campo atual é a mesma cadastrada no banco
* @return boolean True or False
*/
public function verifyActualPasswd() {
// seta o has passwrod pelo auth component
$this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
// resgata o id do usuario
$id = AuthComponent::user('id');
// realiza uma pesquisa no model atual de acordo com o id informado
// trazendo somente os campos id e password
$user = $this->find('first',
array(
'fields'=>array('id','password'),
'conditions' => array('User.id' => $id)
)
);
debug($this->data[$this->alias]['password']);
pr($user);
if ($user) {
return ($this->data[$this->alias]['password'] === $user['User']['password']);
}
}
/**
* Funcao para verificar se as senhas são iguais
* @access public
* @return boolean True or False
*/
public function verifyNewPasswd(){
return ($this->data['User']['new_password']===$this->data['User']['confirm_new_password']);
}
UsersController.php
/**
* Action para que o usuario altere a propria senha
* Esta action te a funcao de que se o usuario é novo e nunca entrou no sistema
* ele tenha a opcao de registrar uma nova senha
* @return [type] [description]
*/
public function change_own_password() {
$userId = $this->Auth->user('id');
//pr($userId);
if ($this->request->is('post')) {
$this->User->set($this->request->data);
if ($this->User->newPasswordValidate()) {
$this->User->id = $userId;
// salva no campo last_try_login a data atual
$this->User->saveField('last_login', date("Y-m-d H:i:s"));
pr($this->request->data);
// salva no campo last_try_login a data atual
$this->User->saveField('password',$this->request->data['User']['new_password']);
$this->logout();