Лучший способ активации аккаунта - PullRequest
1 голос
/ 30 октября 2011

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

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

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

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

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

// 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 - это пустое поле в моей базе данных.

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

Ответы [ 2 ]

0 голосов
/ 05 ноября 2011

Я решил проблему с методом 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'));
            }
        }
    }
}
0 голосов
/ 31 октября 2011
$this->data['User']['activation_key']

должно быть:

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

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

...