PHPのRuby on Railsクローンのフレームワーク Akelos PHPをいじってみた出来事のメモ。

Akelosをいじってみるメモ帳

Akelos PHP Blogチュートリアル一覧(全18記事)
Akelos PHP ユーザ認証チュートリアル一覧(全19記事)

2008年09月02日

Akelosユーザ認証チュートリアル 10.Accountコントローラ アクション実装1

続いてユーザ向けの各アクションの実装をします。

個別のアクション毎に掲出しますが、全てを前述の__constractメソッドの後ろにいれる形になります。

ただし、welcomeだけは中身が必要ありません。
welcomeアクションはbeforeFilterで認証済みユーザのみが入りますが、ここでは各アクションへのリンクを出すだけのページを想定しています。つまりViewだけがあれば良いということですでコントローラはいじりません。
よって、welecomeは追記はありませんので、標準のままです。

その他は色々実装が必要です。アクション別に書いていきます。

機能一覧ページ indexアクション
indexアクションはscaffoldによってlistingへのリダイレクトが書かれています。$this->performAction()または$this->redirectToAction()などが書かれている部分を消します。
そして、セッション情報の書き戻しを加えます。これはユーザ名などをindexページで表示する際に将来必要となるものです。
下記に内容を示します。

function index()
{
// 今回はindexアクションを使うのでリダイレクト無し。よってコメントアウト
// $this->performAction('listing')
$_SESSION['return_page'] ='';

//ユーザ情報を書き戻す
$u = empty($_SESSION['user']) ? false : unserialize($_SESSION['user']);
if(!empty($u)){
$this->user =& $u;
}
}



ユーザ登録 registアクション
ここはscaffoldが作ってくれたaddアクションをコピー&ペーストすると楽です。
addアクションは認証の事を考えていませんし、ユーザ自身が登録するregistアクションの場合、いくつか修正が必要ですので注意してください。以下にコードを示します。

//登録アクション
function regist()
{
//scaffoldが作ったaddアクションからコピー&ペーストで楽に
if(!empty($this->params['user'])){
$this->User->setAttributes($this->params['user']);
if ($this->Request->isPost() && $this->User->save()){
//ここまでは標準状態のaddアクションと同じ。以下、regist用

////ここにはメールの送信処理を後でいれます
///詳細はメール機能のところで

//保存が成功した場合、認証をかける
//さらにセッションにUserモデルクラスをシリアライズして保存
//ログイン状態の維持を行う。

$_SESSION['user'] = serialize($this->User->auth($this->User->email,$this->User->passwd_confirmation));
$this->flash['notice'] = $this->t('account regist success!');
//welcomeメッセージに移動する。

$this->redirectTo(array('action' => 'welcome'));
}else{
//エラーメッセージを足しておきましょう
$this->flash['notice'] = $this->t('Error!! sorry not registed.');
}
}
}

新しいことはありません。ほとんど、ここまでの復習ですね。
細かい流れ、説明はコード中のコメントを参照してください。

少々分かりにくいところは$_SESSIONへの保存ですが、ここではその前に保存したものに対して確認の意味やモデル内のデータをセットしてもらうために、Userモデルのauthを呼んでいます。
authは、成功すればUserモデルのオブジェクト自体を返しますので中身が入ります。失敗すればfalseが入ります。
このように実際の処理はモデルに投げることでコントローラはシンプルになっています。


ユーザログイン loginアクション
ここは全く新しく書きます。以下にコードを示します。

//ログインアクション
function login()
{
if($this->Request->isPost()) {
//ログイン処理を行う。
//認証をかけて、さらにセッションに保存を行う。
$u = $this->User->auth($this->params['user']['email'] , $this->params['user']['passwd']);
if(!empty($u))
{
$_SESSION['user'] = serialize($u);
$this->flash['notice'] = $this->t('login is success');
//保存してあるログイン前の画面に戻るため
//ApplicationControllerのredirectToStoredPage関数に飛ぶ
$this->redirectToStoredPage();
} else {
$_SESSION['user'] = '';
$this->flash['notice'] = $this->t('login failed');
$this->redirectTo(array('action' => 'login'));
}
}
}

ここも同じような処理です。
redirectToStoredPage()メソッドについては、後述のApplicationControllerのところで説明します。


ユーザログアウト logoutアクション
ここも短いですが全く新しいです。コードを示します。

//ログアウトアクション
function logout ()
{
//セッションの情報を破棄
$_SESSION['user'] = false;
$this->flash['notice'] = $this->t('success logout');
//ログイン画面に移動
$this->redirectTo(array('action' => 'login'));
}

シンプルにセッションに保存されているユーザ情報を破棄し、ログイン画面に遷移させています。

続きは次で
posted by AMUAMU at 15:54| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/105900567

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。