Cakephp 2.0 сменить пароль - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь создать форму смены пароля в cakephp 2.0.Я обнаружил поведение, которое EuroMark создал для версии 1.3, и сейчас мне сложно конвертировать этот код для работы с 2.0.Я знаю, что это как-то связано с компонентом Auth, так как в 2.0 были значительные изменения в этом компоненте.

public function validateCurrentPwd(Model $Model, $data) {
if (is_array($data)) {
    $pwd = array_shift($data);
} else {
    $pwd = $data;
}

$uid = null;
if ($Model->id) {
    $uid = $Model->id;
} elseif (!empty($Model->data[$Model->alias]['id'])) {
    $uid = $Model->data[$Model->alias]['id'];
} else {
    return false;
}

if (class_exists('AuthExtComponent')) {
    $this->Auth = new AuthExtComponent();
} elseif (class_exists($this->settings[$Model->alias]['auth'].'Component')) {
    $auth = $this->settings[$Model->alias]['auth'].'Component';
    $this->Auth = new $auth();
} else {
    return true;
}
return $this->Auth->verifyUser($uid, $pwd);
}

Я получаю сообщение об ошибке в строке, которая читает $ this-> Auth = new $ auth ();Ошибка выглядит следующим образом:

Argument 1 passed to Component::__construct() must be an instance of ComponentCollection, none given, called in C:\UniServer\www\new_company_test\app\Model\Behavior\change_password.php on line 117 and defined [CORE\Cake\Controller\Component.php, line 77]

и

Undefined variable: collection [CORE\Cake\Controller\Component.php, line 78]

также выдает это

Call to undefined method AuthComponent::verifyUser() in C:\UniServer\www\new_company_test\app\Model\Behavior\change_password.php on line 121 

Я не уверен, есть ли что-то еще, что нужнов сценарии, я полагаю, что нет, поскольку нет другого места, где используется Auth.

Есть какие-либо предложения о том, что мне нужно сделать, чтобы это работало?Любая помощь приветствуется.Спасибо

1 Ответ

1 голос
/ 21 января 2012

вы обнаружили, что есть также ветка 2.0, не так ли?:) он должен содержать то же поведение: https://github.com/dereuromark/tools/tree/2.0

в любом случае, вам нужно передать в него коллекцию компонентов:

$this->Auth = new AuthExtComponent(new ComponentCollection());

Вы должны создать метод verifyUser в своемПользовательский Компонент AuthExt, который расширяет Компонент Auth для «текущего пароля», чтобы он работал следующим образом:

/**
 * Quickfix
 * TODO: improve - maybe use Authenticate
 * @return bool $success
 */
public function verifyUser($id, $pwd) {
    $options = array(
        'conditions' => array('id'=>$id, 'password'=>$this->password($pwd)),
    );
    return $this->getModel()->find('first', $options);

    $this->constructAuthenticate();
    $this->request->data['User']['password'] = $pwd;
    return $this->identify($this->request, $this->response);
}

/**
 * returns the current User model
 * @return object $User
 */
public function getModel() {
    return ClassRegistry::init(CLASS_USER); 
}

Возможно, также возможно использовать существующий метод identify в сочетании с ложным объектом запроса в поведении напрямую?Я думаю об использовании

$this->authenticate = array('Form'=>array('fields'=>array('username' => 'id')));

, не стесняйтесь раскошелиться и отправить запрос на извлечение.

«текущий пароль» - это единственное, что еще не решено в настоящий момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...