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

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

(前回の続き)

ダッシュボードの実装

ダッシュボードはログイン直後に表示されるページ。ここではサンプルとして、ログアウトとパスワード変更のためのリンクを載せておく。

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

<h2>ダッシュボード</h2>

<?php debug($loggedin); ?>

<?php echo $this->Html->link('パスワード変更', array('controller' => 'users', 'action' => 'password')); ?>
<br />
<?php echo $this->Html->link('ログアウト', array('controller' => 'users', 'action' => 'logout')); ?>

パスワード変更機能の実装

まずはビューを実装。

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

<h2>パスワード変更</h2>

ユーザ名: <?php echo $this->Form->value('User.username'); ?>

<?php
echo $this->Form->create('User');
echo $this->Form->input('id');
echo $this->Form->input('password', array('label' => '新しいパスワード', 'value' => ''));
echo $this->Form->end('更新');
?>

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

// app/Controller/UsersController.php

...
class UsersController extends AppController {
    ....
    // パスワード変更
    public function password() {
        $id = $this->Auth->user('id');
        
        $this->User->id = $id;
        if (!$this->User->exists()) {
            throw new NotFoundException('不適切なユーザ');
        }
        if ($this->request->is('post') || $this->request->is('put')) {
            debug($this->request->data);
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash('パスワードが更新されました。');
                $this->redirect(array('action' => 'dashboard'));
            } else {
                $this->Session->setFlash('パスワードが更新できませんでした');
            }
        }
        $this->request->data = $this->User->read(null, $id);
    }
    ....
}

これにて完成

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