You should use add a field i.e 'change_password' to the model's
validation array. You can then use the Security::hash to hash that
value for saving in the action.
http://www.littlehart.net/atthekeyboard/2008/01/22/simple-user-registration-in-cakephp-12-part-ii/
should help you somewhat.

The article refers specifically to confirming passwords but the
premise is the same. You need to grab the new password and the old.
Check if the old is correct, if it is hash the new, move it to the
data array and save the appropriate model.



On Apr 8, 12:08 pm, Sebastian Veggiani <[EMAIL PROTECTED]> wrote:
> Does anyone have any idea?
>
> On 7 abr, 20:25, elHobbit <[EMAIL PROTECTED]> wrote:
>
> > Thanks b logica.
>
> > But, I really need to use the validation rules in the User model.
> > I'll try to overwrite the validation rules for the fields I'm not
> > using in this view.
> > Anyway, I think the problem isn't that, because with different fields
> > the form works ok.
>
> > Again, thanks for your help.  :)
>
> > On Apr 7, 7:31 pm, "b logica" <[EMAIL PROTECTED]> wrote:
>
> > > If the problem is that Cake is trying to validate User when
> > > unnecessary you could try what Dardo just suggested for a similar
> > > problem I was having. Put this in your edit() action:
>
> > > $this->User->validate = array();
>
> > > On Mon, Apr 7, 2008 at 4:42 PM, elHobbit <[EMAIL PROTECTED]> wrote:
>
> > > >  First, excuse me for my poor english.
>
> > > >  I'm using Cake 1.2.6311. I'm having a weird problem validating some
> > > >  fields from my model.
>
> > > >  The situation is like that:
>
> > > >  - One model "users" with validation rules.
> > > >  - "Users" controller with 2 basic actions: 'edit' & 'changepassword'.
> > > >  - The problem: in the action "changepassword" where I'm only showing
> > > >  the field "password" (and hidden ID field) when the form is submited
> > > >  I'm obtaining a connection reset.
>
> > > >  The weird thing is:
>
> > > >  - If I add this two lines, in which I set the value for the "email"
> > > >  into the ['data'] array the forms submits OK and the validation is
> > > >  triggered.
> > > >  ------------------------------------------------------------------
> > > >  $pp = $this->User->read( null, $id );
> > > >  $this->data['User']['email'] = $pp['User']['email'];
> > > >  ------------------------------------------------------------------
>
> > > >  - If the only showed field is "email" the form is submited OK and the
> > > >  validation triggered as expected without manually loading the
> > > >  "password" field to the "data" array. So I guess this is not a problem
> > > >  related with some requirement of having all "validated" fields in the
> > > >  form.
>
> > > >  My question is:
> > > >  Why if I only show the "email" field everything works fine. But with
> > > >  the field "password" I've to use the workaround from above?
> > > >  I'm very new with Cake so is VERY POSSIBLE I'm doing something veeeery
> > > >  wrong.
>
> > > >  Someone can help me with this issue? Thanks for your attention.
>
> > > >  PS: here is the code of my files:
>
> > > >  User Model:
> > > >  
> > > > -------------------------------------------------------------------------------------
> > > >  <?php
> > > >  class User extends AppModel{
>
> > > >         var $name = 'User';
> > > >         var $belongsTo = array( 'Company', 'Group' );
>
> > > >     var $validate = array(
>
> > > >                 'email' => array(
> > > >                         'required' => array(
> > > >                                 'rule' => 'email',
> > > >                         'required' => true,
> > > >                                 'message' => 'Ingrese una dirección de 
> > > > e-mail válida'
> > > >                         )
> > > >                 ),
>
> > > >                 'password' => array(
> > > >                         'required' => array(
> > > >                                 'rule' => VALID_NOT_EMPTY,
> > > >                                 'message' => 'Debe indicar su 
> > > > contraseña'
> > > >                         )
> > > >                 ),
>
> > > >                 'company_id' => array(
> > > >                         'required' => array(
> > > >                                 'rule' => VALID_NOT_EMPTY,
> > > >                                 'message' => 'Seleccione una empresa'
> > > >                         )
> > > >                 ),
>
> > > >                 'group_id' => array(
> > > >                         'required' => array(
> > > >                                 'rule' => VALID_NOT_EMPTY,
> > > >                                 'message' => 'Seleccione el grupo al 
> > > > que pertenece el usuario'
> > > >                         )
> > > >                 ),
>
> > > >                 // campo adicional para confirmar la contraseña, no 
> > > > existe en la
> > > >  BBDD
> > > >                 'password_conf' => array(
> > > >                         'required' => array(
> > > >                                 'rule' => VALID_NOT_EMPTY,
> > > >                                 'message' => 'Debe confirmar su 
> > > > contraseña'
> > > >                         )
> > > >                 )
>
> > > >         );
>
> > > >  }
> > > >  ?>
>
> > > >  Users controller
> > > >  
> > > > -------------------------------------------------------------------------------------
> > > >  <?php
>
> > > >  class UsersController extends AppController{
>
> > > >         var $name = 'Users';
> > > >         var $paginate = array( 'limit' => 15, 'page' => 1 );
>
> > > >         function control_view() {
> > > >                 ..........
> > > >         }
>
> > > >         function control_edit( $id = null ) {
> > > >                 // protección por tipo de admin
>
> > > >                 // inicialización
> > > >                 $this->layout = 'default';
>
> > > >                 // datos necesarios
> > > >                 $companies = $this->User->Company->find( 'list' );
> > > >                 $this->set('companies', $companies );
>
> > > >                 $groups = $this->User->Group->find( 'list' );
> > > >                 $this->set('groups', $groups );
>
> > > >                 // si no se ha enviado el formulario carga el ID del 
> > > > registro a
> > > >  editar
> > > >                 if ( empty( $this->data ) ) :
> > > >                         $this->User->id = $id;
> > > >                         $this->data = $this->User->read();
> > > >                 else :
> > > >                         // si se ha enviado y valida guarda los datos
> > > >                         if ( $this->User->create($this->data) && 
> > > > $this->User-
> > > >  >validates() ) :
>
> > > >                                 // encripta la contraseña si se está 
> > > > insertando
> > > >                                 if ( empty( $id ) ) :
> > > >                                         $this->data['User']['password'] 
> > > > = md5( $this->data['User']
> > > >  ['password'] );
> > > >                                 endif;
>
> > > >                                 if( $this->User->save( 
> > > > $this->data['User'] ) ) :
> > > >                                         $this->redirect('view');
> > > >                                 endif;
>
> > > >                         endif;
> > > >                 endif;
>
> > > >         }
>
> > > >         function control_delete( $id = null ) {
> > > >                 ......................
> > > >         }
>
> > > >         function control_changepassword( $id = null ) {
> > > >                 // protección por tipo de admin
> > > >                 if ( $this->Session->read('Administrator.superadmin') 
> > > > != 1 ) : $this-
> > > >  >redirect('/control/'); endif;
>
> > > >                 // inicialización
> > > >                 $this->layout = 'default';
>
> > > >                 // inicialización variables
> > > >                 $this->set('passwords_match_error', 0 );
>
> > > >                 // si no se ha enviado el formulario carga el ID del 
> > > > registro a
> > > >  editar
> > > >                 if ( empty( $this->data ) ) :
> > > >                         $this->User->id = $id;
> > > >                         $this->data = $this->User->read();
> > > >                         // dejo en blanco la contraseña para permitir 
> > > > cambiarla
> > > >                         $this->data['User']['password'] = '';
> > > >                 else :
> > > >                         // no se porqué, pero debo cargarle aunque sea 
> > > > un valor del
> > > >  registro al array data para que funcione la validación
> > > >                         $pp = $this->User->read( null, $id );
> > > >                         $this->data['User']['email'] = 
> > > > $pp['User']['email'];
>
> > > >                         // si se ha enviado y valida guarda los datos
> > > >                         if ( $this->User->create( $this->data['User'] ) 
> > > > && $this->User-
> > > >  >validates() ) :
> > > >                                 // si estoy editando
> > > >                                 if ( !empty( $id ) ) :
> > > >                                         // si los campos coinciden 
> > > > guardo la nueva contraseña y
> > > >  redirecciono
> > > >                                         if ( 
> > > > $this->data['User']['password'] == $this->data['User']
> > > >  ['password_conf'] ) :
> > > >                                                 // encripta la contrasña
> > > >                                                 
> > > > $this->data['User']['password'] = md5( $this->data['User']
> > > >  ['password'] );
> > > >                                                 // guarda la contraseña
> > > >                                                 if( $this->User->save( 
> > > > $this->data['User'] ) ) :
> > > >                                                         
> > > > $this->redirect('view');
> > > >                                                 endif;
>
> > > >                                         else:
> > > >                                                 // guarda el error
> > > >                                                 
> > > > $this->set('passwords_match_error', 1);
> > > >                                                 
> > > > $this->set('passwords_match_error_msg', __('Las contraseñas
> > > >  introducidas no coinciden. Por favor inténtelo nuevamente.', true) );
> > > >                                         endif;
>
> > > >                                 else:
> > > >                                                 $this->redirect('view');
> > > >                                 endif;
> > > >                         endif;
>
> > > >                 endif;
> > > >         }
>
> > > >  }
> > > >  ?>
>
> > > >  Users changepassword view
> > > >  
> > > > -------------------------------------------------------------------------------------
> > > >  <div id="sidebar"
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to