(前回の続き)
Usersコントローラの設計
以下、Usersコントローラに実装する機能をざっくり定義。実装は後でやる。
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 30 31 32 33 34 |
// app/Controller/UsersController.php class UsersController extends AppController { // ユーザ登録 (フォームの入力をDBに保存して仮登録し、本登録のためのメールを送信) public function signup() { //TODO 後で実装 } // 本登録 public function activate($user_id = null, $in_hash = null) { //TODO 後で実装 } // ログイン public function login() { //TODO 後で実装 } // ログアウト public function logout() { //TODO 後で実装 } // ダッシュボード (ログイン直後に表示されるホーム画面) public function dashboard() { //TODO 後で実装 } // パスワード変更 public function password() { //TODO 後で実装 } } |
Authコンポーネントの組み込み
Authコンポーネントを組み込むことで、サイトへのアクセスに認証が必要になる。全てのコントローラに適用する必要があるので、全てのコントローラのベースクラスとなるAppControllerクラスに実装する。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// app/Controller/AppController.php class AppController extends Controller { public $components = array('Session', 'Auth'); public function beforeFilter() { // ログインを扱うアクション $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); // ログイン後のリダイレクト先のアクション $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard'); // ユーザがログアウトした後のリダイレクト先となるデフォルトのアクション $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); // ユーザの権限判定のためにアクティブなコントローラの isAuthorized() の戻り値を使う $this->Auth->authorize = array('Controller'); // ユーザのログインに使いたい認証オブジェクトの配列を $this->Auth->authenticate = array( 'Form' => array( 'userModel' => 'User', 'fields' => array( 'username' => 'username', 'password' => 'password' ), 'scope' => array('User.active' => 1) //本登録済みユーザのみログイン可能 ) ); if ($this->Session->check('Auth.User')) { //ログイン済み $loggedin = $this->Session->read('Auth.User'); $this->set(compact('loggedin')); } } // 権限判定チェック public function isAuthorized($user) { // 必要ならばここで権限判定 return true; //許可 } } |
Usersコントローラの以下の3つのアクションは、未ログインの状態でもアクセスできる必要がある。
- signup (ユーザ登録)
- activate (本登録)
- login (ログイン)
Authコンポーネントのallowメソッドを使って、未ログイン状態でのアクセスを許可しておく。
1 2 3 4 5 6 7 8 9 10 |
// app/Controller/UsersController.php class UsersController extends AppController { public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow(array('signup', 'activate', 'login')); } ... } |
(次回へ続く)
全ソース (GitHub)
https://github.com/84kure/cakephp2-sample-auth