ログイン画面をデバッグする(CakePHP修行 #012)

SPONSORED LINK

Pocket

さてCakePHP。前回までのあらすじはこちら。

» CakePHP修行! アーカイブ | i d e a * i d e a

で、前回まででログイン画面をざっくり動作させようとしたのですが、なんだかエラーが出てうまくいきませんでした。

うっかり「CakePHP修行終了~」エントリーを書こうと思いましたがw、青い人がフォローしてくれたので続けたいと思います。ありがとう!青い人。すごい勉強になっている!

ちなみにつっこんでもらったエントリーはこちら。

» Re: CakePHP修行 #011 無限リダイレクトに気をつけろ : akiyan.com

ポイントはいくつか。

  • 「ブラウザの不正リダイレクトは無限ループが原因」ってことが多いらしいことを知りました。
  • ControllerのbeforeFilter()の挙動について学んだ。
  • 解決方法についてアイディアをもらった。

うむ。かなりのぽかミスにもかかわらず「よくあるミス」となぐさめてくれた青い人に感謝感激。教え上手ですな。さすが開発チームのリーダー。

ではでは気を取り直していってみます。

■ 今回の作業計画

いろいろ考えた結果、今回は以下をやってみます。

  • 前回のエラーに関しては単純にbeforeFilterを使わずに、ログインが必要なアクションについてその都度checkSession()を呼ぶようにしたいと思います。
  • 現在Sessionに保存されている情報は’User’で、User情報全部なのですが、IDだけでいいだろ、ということで’my_id’をログイン後にセッションに保存するようにします。そうしないとユーザー情報が変わった時に全部セッション書き換えないといけないので。
  • users_controllerにhome()を足します。home()は自分のホーム画面を表示するためのものです。
  • http://www.codexcode.com/にアクセスすると自分のホーム画面に行くように設定してみます。
  • ヘッダーとフッターのテンプレートを変更して画面をかっこよくします。

さてがしがしやりましょう。

■ セッション関連、home()など

まずはController。beforeFilter()を削除し、ログインの挙動を変更し、home()を追加します。

/app/controllers/users_controller.phpは以下のように。

  function home ()
  {
    $this->checkSession();
    $this->set('me', $this->User->findById($this->Session->read('my_id')));
  }
  function login()
  {
    $this->set('error', false);
    if (!empty($this->data))
    {
      $someone = $this->User->findByEmail($this->data['User']['email']);
      if(!empty($someone['User']['pwd']) && $someone['User']['pwd'] == $this->data['User']['pwd'])
      {
        $this->Session->write('my_id', $someone['User']['id']);
        $this->redirect('/users/home/');
      }
      else
      {
        $this->set('error', true);
      }
    }
  }

セッションの変更に合わせて/app/app_controller.phpも変更。

<?php
class AppController extends Controller
{
    function checkSession()
    {
        // If the session info hasn't been set...
        if (!$this->Session->check('my_id'))
        {
            // Force the user to login
            $this->redirect('/users/login');
            exit();
        }
    }
}

viewも追加しないといけませんね。/app/views/users/home.thtmlも作ります。とりあえずデータをDumpするだけで。

<?php
  var_dump ($me);

ここまでを一気に完了。テストしてみます。

まずは /users/home/ にアクセス。

login_1.gif

↑ ちゃんとログイン画面がでました!

login_3.gif

↑ 無事ログインすると自分の情報が!

さて、次はURLの挙動とテンプレートについて作業してみます。長くなるのでエントリーわけよっと。

ツイッターもやっています!

SPONSORED LINK

    • sky
    • April 23rd, 2009

    phpの初心者です。一歩一歩マネして作ってますが
    modelsにuser.phpは作らなくていいですか?
    なぜかログインできないですが、、、

  1. April 9th, 2009