Регистрация
Сначала в базе данных надо создать таблицу с пользователями:
CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255), email VARCHAR(100), created DATETIME, modified DATETIME ) ENGINE=INNODB;
Затем надо создать файлы для таблицы users.
В файле app/Model/User.php надо прописать код, чтобы шифровать пароли пользователей перед сохранением в базу данных:
App::uses('AuthComponent', 'Controller/Component'); class User extends AppModel { public function beforeSave($options = array()) { // шифрование пароля if (isset($this->data[$this->alias]['password'])) { $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); } return true; } }
В контроллере набрать следующий код, который позволит открывать указанные страницы (экшены) всем посетителям сайта, иначе откроется страница авторизации, например example.com/users/login.
public $components = ['Auth']; public function beforeFilter() { parent::beforeFilter(); /* разрешённые страницы текущего контроллера, если пользователь не авторизован */ $this->Auth->allow('index', 'view'); }
В шаблоне прописать код ниже, который сгенерирует форму регистрации:
<?= $this->Flash->render('auth'); // сообщения регистрации для CakePHP 2.7 и выше ?> <?= $this->Session->flash('auth'); // сообщения регистрации до CakePHP 2.7 ?> <?= $this->Form->create('User'); ?> <?= $this->Form->input('username'); ?> <?= $this->Form->input('password'); ?> <?= $this->Form->input('email'); ?> <?= $this->Form->end('Sign In'); ?>
Останется сохранить пользователя в файле контроллера.
if ($this->request->is('post')) { $this->User->create(); if ($this->User->save($this->request->data)) { $this->Flash->success('Вы успешно зарегистрировались'); // $this->Session->setFlash() для CakePHP ниже версии 2.7 $this->redirect($this->Auth->redirectUrl()); } else { $this->Flash->error('Не удалось зарегистрироваться'); $this->redirect($this->request->here); } }