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

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

(前回の続き)

ログイン機能の実装

まずはビューを実装。

<?php /* app/View/Users/login.ctp*/ ?>

<h2>ログイン</h2>

<?php
echo $this->Form->create('User');
echo $this->Form->input('username', array('label' => 'ユーザ名'));
echo $this->Form->input('password', array('label' => 'パスワード'));
echo $this->Form->end('ログイン');
?>

<?php echo $this->Html->link('ユーザ登録', array('controller' => 'users', 'action' => 'signup')); ?>

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

// app/Controller/UsersController.php

...
class UsersController extends AppController {
    ....
    // ログイン
    public function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->User->id = $this->Auth->user('id');
                $this->User->saveField('logins', $this->Auth->user('logins') + 1);  //通算ログイン回数
                $this->User->saveField('lastlogin', date('Y-m-d H:i:s'));           //最終ログイン日時
                return $this->redirect($this->Auth->redirect());
            } else {
                $active = $this->User->field('active', array('username' => $this->data['User']['username']));
                if ($active === 0) {
                    $this->Session->setFlash('本登録してください。');
                } else {
                    $this->Session->setFlash('ユーザ名かパスワードが違います。');
                }
            }
        }
    }
    ....
}

ログアウト機能の実装

ログアウトされたらログイン画面に移行させるのでビューは必要無し。

アクションのみ実装。

// app/Controller/UsersController.php

...
class UsersController extends AppController {
    ...
    // ログアウト
    public function logout() {
        $this->Session->setFlash('ログアウトしました。');
        return $this->redirect($this->Auth->logout());
    }
    ...
}

これでログイン・ログアウトの仕組みが完成。

(次回へ続く)

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