(前回の続き)
ユーザ登録機能の実装
まずビューを実装。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php /*app/View/Users/signup.ctp*/ ?> <h2>ユーザ登録</h2> <?php echo $this->Form->create('User'); echo $this->Form->input('username', array('label' => 'ユーザ名')); echo $this->Form->input('email', array('label' => 'メールアドレス')); echo $this->Form->input('password', array('label' => 'パスワード')); echo $this->Form->input('password_confirm', array('label' => 'パスワード(再入力)', 'type' => 'password')); echo $this->Form->end('登録'); ?> |
そしてアクションを実装。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// app/Controller/UsersController.php App::uses('CakeEmail', 'Network/Email'); class UsersController extends AppController { .... // ユーザ登録 (フォームの入力をDBに保存して仮登録し、本登録のためのメールを送信) public function signup() { if ($this->request->is('post')) { if ($this->User->save($this->data)) { // 本登録用のリンクを作成 $url = 'activate/' . $this->User->id . '/' . $this->User->getActivationHash(); $url = Router::url($url, true); //-------------------------------------------------------------- // 本登録の案内メールを送信 $email = new CakeEmail(); $email->from(array('sender@domain.com' => 'Sender')); $email->to($this->data['User']['email']); $email->subject('本登録のご案内'); $email->send($url); // メール本文に本登録用リンクを記す //-------------------------------------------------------------- $this->Session->setFlash('仮登録成功。メール送信しました。'); } else { $this->Session->setFlash('入力エラー'); } } } .... } |
フォームに入力された内容を仮登録としてDBに保存したら、ユーザへ確認メールを送信する流れ。メールには以下のリンクを記しておき、ユーザがこのリンクをクリックしたら本登録が完了するようにする。
1 |
http://サイト/users/activate/ユーザID/ハッシュ |
環境に合わせてメール設定も忘れずにしておくこと (app/Config/email.php)。
(次回へ続く)
全ソース (GitHub)
https://github.com/84kure/cakephp2-sample-auth