[CakePHP] シンプルな認証を実装する(認証の前半) – Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/4855
なところでフォーム認証ができたので「こんにちは、○○さん」だけ作ってみる。
下記のように、ログイン状態を表示して login/logout へのリンクもつける。
□ログイン状態
こんな風に、ログイン状態とリンクを表示させる。
■AppController.php を変更する
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
<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