CakePHPでAuthComponentを使わない簡単なログイン認証を実装する

クライアントに納品するデータのダウンロードページや、特定の人にだけ公開したい内容のページなど、パスワードをかけてアクセスを制限したいけどAuthコンポーネントやデータベースを使うほど大げさではないページが必要な時がありますよね。
そんな時にサッと作れる簡単なログイン認証の仕組みを、Sessionを使った昔ながらのレガシーな作法で実装してみました。

まずはコントローラーにパスワードで制限するページとログインフォーム、ログアウトのアクションを定義します。

<?php
class MembersController extends AppController {
	
	// Sessionコンポーネントを使用
	public $components = array('Session');
 	
	// パスワードで制限するページ
	public function index() {
		// ログインフラグがnullならログインフォームにリダイレクト
		if (! $this->Session->check('login')) {
			$this->redirect(array('action' => 'login'));
		}
	}
	
	// ログインフォーム
	public function login() {
		$errors = array();
		if ($this->request->data) {
			// ログインIDが「test」でパスワードが「1234」なら
			if ($this->data['userid'] === 'test' && $this->data['password'] === '1234') {
				// ログインフラグを立ててページにリダイレクト
				$this->Session->write('login', true);
				return $this->redirect(array('action' => 'index'));
			} else {
				// 認証失敗
			}
		}
	}
	
	// ログアウト
	public function logout() {
		$this->Session->write('login', null);
		$this->redirect(array('action' => 'index'));
	}
}

ログインフォームを用意します。
$this->Form->create(); に「false」を渡して、モデルを使用しないようにするのがポイントです。

<h1>ログインフォーム</h1>
<?php echo $this->Form->create(false); ?>
<?php echo $this->Form->password('userid'); ?>
<?php echo $this->Form->password('password'); ?>
<?php echo $this->Form->end('ログイン'); ?>

ログイン認証後に表示するページを用意します。
ログインフォームから送られたIDとパスワードが一致すると、このページに遷移します。

<h1>会員専用ページ</h1>
<?php echo $this->Html->link('ログアウト', array('action' => 'logout')); ?>

認証が必要なページを増やす場合は、各ページのアクションで $this->Session->check(‘login’) でセッションのフラグが立っているかをチェックして、認証がされてない場合は index() にリダイレクトすればOKです。


こちらもおすすめ!

1分程度でサクッと遊べる簡単なトランプのアプリをリリースしました。無料です。
通勤・通学の時間つぶしにどうぞ!


Tweet about this on TwitterShare on Facebook1Share on Google+0Pin on Pinterest0

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です