<< <2014年4月     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    

投稿の詳細: [CakePHP]ログイン機能作成(#001)

[CakePHP]ログイン機能作成(#001)

Permalink2008/06/27 01:14:20 カテゴリ: SNS作成日記

今回は、ログイン機能を作りたいと思います。


「app_controller」の記述

「app_controller」の「beforeFilter()」に記述すると、すべてのコントローラーの全アクション前に実行されます。

<?php
class AppController extends Controller
{
    // ログインを必須とするかどうかのフラグ
    var $needAuth = false;

    function beforeFilter()
    {
        // ユーザー画面用
        if ($this->name == "Users") {
            // セッションから取り出したログイン情報をセット
            $auth = $this->Session->read('auth');
            $this->set('auth', $auth);

            // ログイン必須の機能でログインされていない場合はログイン画面へ転送
            if ($this->needAuth && $this->action != 'login') {
                if (empty($auth)) {
                    $this->redirect('/users/login/');
                    exit;
                }
            }
        }
    }
}

これで、各コントローラーに「var $needAuth = true;」を記述すると、そのコントローラーは全てログイン必須になります。
しかし、「ログイン画面」に適用されると無限ループになってしまうので「login」アクションだけは適用外にします。
「$this->action」←これでアクション名を取得できます。
ので、「$this->action != 'login'」を記述します。
これで、ログイン画面だけは適用外になりました。


Userモデルを作成

/app/models/user.php

<?php
class User extends AppModel
{
    var $name = 'User';
}


Usersコントローラーを作成

/app/controllers/users_controller.php

<?php
class UsersController extends AppController
{
    var $name = 'Users';
    var $uses = array('User'); // Userモデルを使用
    var $needAuth = true;      // ログイン必須のフラグ

    /*
     * ログインページ
     */
    function login()
    {
        // ページタイトルの設定
        $this->pageTitle = 'Web-local.community「local.SNS」';

        // データが送られてきたら
        if (!empty($this->data)) {
            // パスワードを暗号化
            $this->data['User']['pwd'] = md5($this->data['User']['pwd']);
            // 入力された[id]と[pwd]がデータベースにある場合のみ[$user_data]に値が入る
            $user_data = $this->User->findByEmailAndPwd($this->data['User']['email'], $this->data['User']['pwd']);
            // [$user_data]が空じゃなければ
            if (!empty($user_data)) {
                // 値をセッションに格納
                $this->Session->write('auth', $user_data['User']);
                // リダイレクトする
                $this->redirect('/users/home');
                exit;
            } else { // [$user_data]が空ならログイン画面へ
                // エラーメッセージをビューに渡す
                $this->set('login_error', 'ログインできませんでした・・・');
                // ログイン画面の呼出
                $this->render('login');
            }
        }
    }

    /*
     * ログアウト処理
     */
    function logout()
    {
        // セッションを破棄してログイン画面へ
        $this->Session->delete('auth');
        $this->redirect('/users/login');
        exit;
    }
}


Usersビューを作成

/app/views/users/login.thtml

<div id="login_body">
  <h1>ログイン画面</h1>
  <?php
    // ログインできなかった場合はエラーメッセージ表示
    if (!empty($login_error)) {
        echo '<font color="red"><b>' . $login_error . '</b></font>';
    }
  ?>
  <form method="post" action="<?php echo $html->url('/users/login/'); ?>">
  <table>
    <tr>
      <th><label for="id">メールアドレス:</label></th>
      <td><?php echo $html->input('User/email', array('size' => 30)); ?></td>
    </tr>
    <tr>
      <th><label for="pwd">パスワード:</label></th>
      <td><?php echo $html->password('User/pwd', array('size' => 30, 'value' => '')); ?></td>
    </tr>
      <td></td>
      <td><?php echo $html->submit(' ログイン '); ?></td>
    </tr>
  </table>
</form>
</div>


▼若干デザインを入れ、とりあえずこんな感じ。


次は、ホーム画面を作ります。


▼次の記事
[CakePHP]ホーム画面を作る(#002)


▼前回の記事
[CakePHP]テーブルを作成する(#000)


▼参考サイト
CakePHP修行! アーカイブ | i d e a * i d e a

この記事へのトラックバック アドレス

コメント, トラックバック:

この投稿への コメント/トラックバック はまだありません...

この投稿にはモデレーション待ちのフィードバックが 28 件あります....

コメントを残す:

頂いたメールアドレスはこのサイト上には表示されません
頂いたURLは表示されます。

許可される XHTML タグ: <p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite, abbr, acronym, q, sub, sup, tt, i, b, big, small>
(改行が自動で <br /> になります)
(名前、メールアドレス、URLを記憶する Cookie を発行します)
(ユーザがメッセージ・フォームを通してあなたに連絡することを許可します (あなたのメール・アドレスは表示されません))

↑ページ上部へ

ブログ内容

元花屋で現在は「かしもソフトウェア」にてSE勉強中の新米プログラマーの日記。 今、話題の「CakePHP」を修得していく日記です。

カテゴリ一覧

最近のコメント

e-shop 一六社