端くれプログラマの備忘録 CakePHP [CakePHP] ユーザ登録とログイン認証を実装する (3)

[CakePHP] ユーザ登録とログイン認証を実装する (3)

(前回の続き)

ユーザ登録機能の実装

まずビューを実装。

<?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('登録');
?>

そしてアクションを実装。

// 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に保存したら、ユーザへ確認メールを送信する流れ。メールには以下のリンクを記しておき、ユーザがこのリンクをクリックしたら本登録が完了するようにする。

http://サイト/users/activate/ユーザID/ハッシュ

環境に合わせてメール設定も忘れずにしておくこと (app/Config/email.php)。

(次回へ続く)

全ソース (GitHub)
https://github.com/84kure/cakephp2-sample-auth