SOLVED!!!, Thanks José Lorenzo

public function login() {
        if ($this->request->is('post')) {
            $user = $this->Users->newEntity($this->request->data);
            if ($this->Users->validate($user)) {
                $auth = $this->Auth->identify();
                if ($auth) {
                    $this->Auth->setUser($auth);
                    return $this->redirect($this->Auth->redirectUrl());
                }
                $this->Flash->error(__('Invalid username or password.'));
            }
            $this->Flash->error(__('Please correct the errors below.'));
        }
        $this->set(compact('user'));
    }



El miércoles, 12 de noviembre de 2014 12:13:25 UTC-2, cesar calvo escribió:
>
> Perhaps reusable validators 
> <http://book.cakephp.org/3.0/en/core-libraries/validation.html#creating-reusable-validators>
>  
> is one solution.
>
> Why username in login form not validates email rule? Presence and notEmpty 
> are validates and show related message but email rule is not applied!. I 
> think this only work on create or update context.
>
> //model
> return $validator
>             ->validatePresence('username')
>             ->notEmpty('username', __('This field is required.'))
>             ->add('username', [
>                 'valid' => [
>                     'rule' => 'email', 
>                     'message' => __('This field requires a valid email 
> address.')
>                 ]
>             ]);
>
> //controller
> if ($this->request->is('post')) {
>             $user = $this->Auth->identify();
>             if ($user) {
>                 $this->Auth->setUser($user);
>                 return $this->redirect($this->Auth->redirectUrl());
>             }
>             $this->Flash->error(__('Invalid username or password.'));
>         }
>         $this->set('user', $this->Users->newEntity());
>
> //view
>     $this->Form->create($user),
>     $this->Form->input('username', ['label' => __('Username'), 
> 'placeholder' => __('E-mail address'),]),
>     $this->Form->input('password', ['label' => __('Password'), 'value' => 
> false]),
>     $this->Form->button(__('Submit')),
>     $this->Form->end()
>
> El miércoles, 12 de noviembre de 2014 11:23:59 UTC-2, José Lorenzo 
> escribió:
>>
>> Then use a validator in the controller instead of validating how data 
>> looks like in the table. Validation in the table is meant for data 
>> integrity, not so much how data looks like.
>>
>> On Wednesday, November 12, 2014 1:06:25 PM UTC+1, cesar calvo wrote:
>>>
>>> Indeed I have _setPassword in the Entity.
>>>
>>> protected function _setPassword($password) {
>>>         if (!empty($password)) {
>>>             return (new DefaultPasswordHasher)->hash($password);
>>>         }
>>>         return $password;
>>>     }
>>>
>>> El miércoles, 12 de noviembre de 2014 09:56:57 UTC-2, José Lorenzo 
>>> escribió:
>>>>
>>>> If you have a _setPassword() function in your entity, that function 
>>>> will be called before validating the data. That means that the length of 
>>>> the password will be much larger than the original passed password. In 
>>>> those cases it is better to not validate using the table, but create a 
>>>> validator in the controller and validate the data that way.
>>>>
>>>> On Wednesday, November 12, 2014 12:27:22 PM UTC+1, cesar calvo wrote:
>>>>>
>>>>> The login form is very similar to that used in the blog tutorial. 
>>>>> I can see that there is no link to the LOGIN form with associated 
>>>>> model.
>>>>> ADD and EDIT actions perform validation over username but not over 
>>>>> password field.
>>>>> With "ignore" I mean that the model validation rules do not apply. 
>>>>>
>>>>> public function login() {
>>>>>         if ($this->request->is('post')) {
>>>>>             $user = $this->Auth->identify();
>>>>>             if ($user) {
>>>>>                 $this->Auth->setUser($user);
>>>>>                 return $this->redirect($this->Auth->redirectUrl());
>>>>>             }
>>>>>             $this->Flash->error(__('Invalid username or password.'));
>>>>>         }
>>>>>     }
>>>>>
>>>>> public function add() {
>>>>>         $user = $this->Users->newEntity($this->request->data);
>>>>>         if ($this->request->is('post')) {
>>>>>             if ($this->Users->save($user)) {
>>>>>                 //mail connection...
>>>>>                 $this->Flash->success(__('A message has been sent to 
>>>>> your email address.'));
>>>>>                 return $this->redirect(['action' => 'login']);
>>>>>             }
>>>>>             $this->Flash->error(__('Unable to save your data.'));
>>>>>         }
>>>>>         $this->set(compact('user'));
>>>>>     }
>>>>>
>>>>> public function edit() {
>>>>>         $user = $this->Users->get($this->Auth->user('id'));
>>>>>         if ($this->request->is(['post', 'put'])) {
>>>>>             $this->Users->patchEntity($user, ['password' => 
>>>>> $this->request->data('password')]);
>>>>>             if ($this->Users->save($user)) {
>>>>>                 $this->Flash->success(__('Your data has been 
>>>>> updated.'));
>>>>>                 return $this->redirect(['action' => 'index']);
>>>>>             }
>>>>>             $this->Flash->error(__('Unable to update your data.'));
>>>>>         }
>>>>>         $this->set(compact('user'));
>>>>>     }
>>>>>
>>>>> //login.ctp
>>>>> <?=
>>>>>     $this->Form->create(),
>>>>>     $this->Form->input('username', ['label' => __('Username'), 
>>>>> 'required' => true, 'placeholder' => __('E-mail address'),]),
>>>>>     $this->Form->input('password', ['label' => __('Password'), 
>>>>> 'required' => true, 'value' => false]),
>>>>>     $this->Form->button(__('Submit')),
>>>>>     $this->Form->end()
>>>>> ?>
>>>>>
>>>>> //add.ctp
>>>>> <?=
>>>>>     $this->Form->create($user),
>>>>>     $this->Form->input('username', ['label' => __('Username'), 
>>>>> 'placeholder' => __('E-mail address')]),
>>>>>     $this->Form->input('password', ['label' => __('Password'), 'value' 
>>>>> => false]),
>>>>>     $this->Form->button(__('Submit')),
>>>>>     $this->Form->end()
>>>>> ?>
>>>>>
>>>>> //edit.ctp
>>>>> <?=
>>>>>     $this->Form->create($user),
>>>>>     $this->Form->input('username', ['label' => __('Username'), 
>>>>> 'disabled' => true]),
>>>>>     $this->Form->input('password', ['label' => __('Password'), 'value' 
>>>>> => false]),
>>>>>     $this->Form->button(__('Submit')),
>>>>>     $this->Form->end();
>>>>> ?>
>>>>>
>>>>> El miércoles, 12 de noviembre de 2014 07:30:41 UTC-2, José Lorenzo 
>>>>> escribió:
>>>>>>
>>>>>> What do you mean with "the validator ignores?" What is the data that 
>>>>>> you are trying to validate and what is the result?
>>>>>>
>>>>>> On Tuesday, November 11, 2014 5:03:19 PM UTC+1, cesar calvo wrote:
>>>>>>>
>>>>>>> Hi people, I have this validation rules in UsersTable.
>>>>>>> The validator ignores the ->add(password, lenght) sentence.
>>>>>>> The issue is when I try to create or update a record.
>>>>>>>
>>>>>>> Best regards --cesar
>>>>>>>
>>>>>>> public function validationDefault(Validator $validator) {
>>>>>>>         return $validator
>>>>>>>             ->validatePresence('username', 'create')
>>>>>>>             ->notEmpty('username', __('This field is required.'))
>>>>>>>             ->add('username', [
>>>>>>>                 'valid' => [
>>>>>>>                     'rule' => 'email', 
>>>>>>>                     'message' => __('This field requires a valid 
>>>>>>> email address.')
>>>>>>>                 ],
>>>>>>>                 'unique' => [
>>>>>>>                     'rule' => 'validateUnique', 
>>>>>>>                     'provider' => 'table', 
>>>>>>>                     'message' => __('This field must be unique.')
>>>>>>>                 ]
>>>>>>>             ])
>>>>>>>             ->validatePresence('password', 'create')
>>>>>>>             ->notEmpty('password', __('This field is required.'))
>>>>>>>             ->add('password', [
>>>>>>>                 'length' => [
>>>>>>>                     'rule' => ['minLength', 8],
>>>>>>>                     'message' => __('Password must be at least {0} 
>>>>>>> characters long.', 8),
>>>>>>>                 ]
>>>>>>>             ])
>>>>>>>         ;
>>>>>>>     }
>>>>>>>
>>>>>>

-- 
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

--- 
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

Reply via email to