Redigitar a senha atual antes de alterar a senha

296 views
Skip to first unread message

Temístocles

unread,
Jun 29, 2012, 3:36:40 PM6/29/12
to cakep...@googlegroups.com
O sistema terá uma área de login para usuário restritos e os mesmo terão uma área para fazer alteração de senha, e para alterar a senha inicial, primeiro irá verificar a senha atual e depois ira digitar a nova senha. Estava querendo fazer este procedimento criando uma função no model e pela validação, enviar uma mensagem para a view dizendo "A senha atual digitada esta incorreta." assim como as outras validações padrões do cake - notempty, numeric etc... só que, por exemplo verifica_password. Como eu faria dessa forma. Obrigado.

Temístocles

unread,
Jun 29, 2012, 3:39:07 PM6/29/12
to cakep...@googlegroups.com
Esqueci de avisar que estou utilizando o CakePHP 2.x. Obrigado.

ilivanilton rezende

unread,
Jul 2, 2012, 8:04:46 AM7/2/12
to cakep...@googlegroups.com
Simplifica, utiliza js!

abç.

--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT

Lucas Simon Rodrigues Magalhaes

unread,
Jul 3, 2012, 8:29:33 AM7/3/12
to cakep...@googlegroups.com
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();
Reply all
Reply to author
Forward
0 new messages