2013-12-19 3 views
0

Поскольку ваниль CakePHP не очень хорошо обрабатывает поля пароля при просмотре прав пользователя (повторяет хешированный пароль в поле пароля и т. Д.), Я пытаюсь использовать метод PasswordableBehavior от dereuromark для обработки регистрации пользователей и обновлений паролей.Как использовать PasswordableBehavior с CakePHP?

Я попытался выполнить руководство (http://www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/), внеся следующие изменения, но сервер продолжает выдавать ошибку. В чем проблема? Поскольку ошибка в PasswordableBehavior.php, я не на 100% уверен, что я напортачиваюсь.

UsersController.php:

public function register() { 
if ($this->request->is('post') || $this->request->is('put')) { 
    $this->User->Behaviors->attach('Tools.Passwordable'); 
    if ($this->User->save($this->request->data, true, array('username', 'name', 'email', 'pwd', 'pwd_repeat', 'group_id'))) { 
    $this->Session->setFlash(__('The user has been saved'), 'flash/success'); 
      $this->redirect(array('action' => 'index')); 
} else { 
      $this->Session->setFlash(__('The user could not be saved. Please, try again.'), 'flash/error'); 
     } 
    unset($this->request->data['User']['pwd']); 
    unset($this->request->data['User']['pwd_repeat']); 
} 

и register.ctp (возможно дыра в безопасности предупреждение)

<?php 
echo $this->Form->create('User', array('role' => 'form')); 
echo $this->Form->input('username', array('class' => 'form-control')); 
echo $this->Form->input('name', array('class' => 'form-control')); 
echo $this->Form->input('email', array('class' => 'form-control')); 
echo $this->Form->input('password', array('class' => 'form-control')); 
echo $this->Form->hidden('group_id', array('value'=>3)); 
echo $this->Form->submit('Submit', array('class' => 'btn btn-large btn-primary')); 
echo $this->Form->end(); 

Наконец, ошибка сервера:

Strict (2048): Declaration of PasswordableBehavior::beforeValidate() should be compatible with ModelBehavior::beforeValidate(Model $model, $options = Array) [APP/Plugin/Tools/Model/Behavior/PasswordableBehavior.php, line 338] 
Strict (2048): Declaration of PasswordableBehavior::beforeSave() should be compatible with ModelBehavior::beforeSave(Model $model, $options = Array) [APP/Plugin/Tools/Model/Behavior/PasswordableBehavior.php, line 338] 

ответ

1

1) Строгий эрро rs не имеют большого значения. IMO просто отключает строгую отчетность об ошибках.

2) Ошибки, которые вы видите, связаны с тем, что два метода в Поведении (beforeValidate() и beforeSave()) не имеют полных опций.

Просто убедитесь, что они имеют правильные параметры, как показано ниже, и строгие ошибки уйдут:

public function beforeValidate(Model $model, $options = array()) { 
    //... 

public function beforeSave(Model $model, $options = array()) { 
    //...