Лучший способ активации учетной записи

#php #model-view-controller #cakephp-2.0

#php #модель-представление-контроллер #cakephp-2.0

Вопрос:

Я пытаюсь создать страницу регистрации учетной записи, на CakePHP 2.0 которой пользователю необходимо активировать свою новую учетную запись, нажав на ссылку в электронном письме, которое он получил после вставки username , email и password .

Мой вопрос заключается в том, как я могу установить код активации внутри записи пользователя.

Я подумал создать поле таблицы с именем activation_code , а затем сохранить hashed версию username , чтобы быть уверенным, что пользователь может активировать себя, нажав на ссылку электронной почты с ключом активации.

Вся процедура выполнена, но я не знаю, как я могу установить activation_code внутри $data['User'] объекта, и мне неясно, является ли это хорошим использованием MVC framework или я должен сделать это по-другому.

Во время действия регистрации пользователя я сделал это, но я получаю сообщение об ошибке при попытке динамического создания activation_code:

 // from the UserController class
public function register () {
    if (!empty($this->data)) {
        if ($this->data['User']['password'] == $this->data['User']['confirm_password']) {
            // here is where I get the error
            $this->data['User']['activation_key'] = AuthComponent::password($this->data['User']['email']);
            $this->User->create();
            if ($this->User->save($this->data)) {
                // private method
                $this->registrationEmail ($this->data['User']['email'], $this->data['User']['username']);
                $this->redirect(array('controller'=>'users', 'action'=>'registration', 'success'));
            }
        }
    }
}
 

Очевидно, что это activation_key пустое поле внутри моей базы данных.

Итак, как я могу создать файл динамически из контроллера?

Ответ №1:

 $this->data['User']['activation_key']
 

должно быть:

 $this->request->data['User']['activation_key']
 

(Вы должны изменить все ссылки на $this->data на новый cakephp2.0 $this-> request->data)

Ответ №2:

Я решил проблему с помощью метода Model::set() , поэтому:

 public function register () {
    if (!empty($this->data)) {
        if ($this->data['User']['password'] == $this->data['User']['confirm_password']) {
            $this->User->create();
            // I've used set method
            $this->User->set('activation_key', AuthComponent::password($this->data['User']['email']));
            if ($this->User->save($this->data)) {
                $this->registrationEmail ($this->data['User']['email'], $this->data['User']['username']);
                $this->redirect(array('controller'=>'users', 'action'=>'registration', 'success'));
            }
        }
    }
}