[CakePHP] シンプルな認証を実装する(認証の前半) – Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/4855
なところでフォーム認証ができたので「こんにちは、○○さん」だけ作ってみる。
下記のように、ログイン状態を表示して login/logout へのリンクもつける。
□ログイン状態
こんな風に、ログイン状態とリンクを表示させる。
■AppController.php を変更する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class AppController extends Controller { public $components = array ( 'Session' , 'Auth' => array ( // ログイン後に /Posts/index へジャンプ 'loginRedirect' => array ( 'controller' => 'posts' , 'action' => 'index' ), // ログアウト後に /Pages/home へジャンプ 'logoutRedirect' => array ( 'controller' => 'pages' , 'action' => 'display' , 'home' )) ); public function beforeFilter() { // 各コントローラーの index と view を有効にする $this ->Auth->allow( 'index' , 'view' ); // 認証コンポーネントをViewで利用可能にしておく $this ->set( 'auth' , $this ->Auth); } } |
*.ctp で直接表示することも考えたのだが、Controller 経由でないと Auth コンポーネントを扱えないので、VView で扱えるように AppController に $this->set(‘auth’, $this->Auth ); という形で View からも Auth を使えるようにしてしまう。スピード的にはどうなんだろう、と思うところもあるけれど、こうするとすべての view からログイン関係がアクセス可能になるので、コードが楽になる。
■View で login/logiout の表示を制御する
app/Posts/index.ctp
1 2 3 4 5 6 7 8 9 10 11 | < div > <? php if ($auth->loggedIn()) : ?> <? php echo h($auth->user('username')); ?> さん、こんにちは < a href = "/cakeu/Users/logout" >logout</ a > <? php else: ?> < a href = "/cakeu/Users/login" >login</ a > <? php endif ?> </ div > < div class = "posts index" > < h2 ><? php echo __('Posts'); ?></ h2 > < table cellpadding = "0" cellspacing = "0" > ... |
実際は「こんにちは○○さん」のところは、View のコンポーネントとして用意したほうがいいと思う。そうしないと、あちこちに View に同じコードが散らばるし、あとからフォーマットを変えようと思ってえらいことになってしまう。login 状態による分岐なので、Controller でレンダリングする方法もあるのだが、「こんにちは」の部分とか、login, logout へのリンクは view の範疇になるので、Controller に押し込むとちょっと変な形になりそう。ってことで View に。
ログインしているかどうかは $this->Auth->loggedIn() でしらべて、 $this->auth->user(‘username’) でユーザ名を拾ってくる。username 自体はデータベースの列名そのままなので、ニックネームとかロールとかも拾える。
そんな訳で続きは、ユーザ名やロールによって処理を分ける方式を。
ピンバック: cakephpでviewからログイン判定してアカウント表示する機能 | world is wonderful always