シェアする

  • このエントリーをはてなブックマークに追加

[CakePHP][PHP]コンポーネントを利用せずにベーシック認証を実装する

CakePHPの案件で一時的に特定のページ以下にBasic認証を付けたいという要望があって対応したのですが、CakePHP2系からはSecurityコンポーネントを使ったベーシック認証が廃止されたんですね。

2系では基本的にデータベースを利用してユーザ管理し、その情報を利用してAuthコンポーネントで実装するようです。
認証 ? CakePHP Cookbook 2.x ドキュメント

。。。面倒。

というわけで、コンポーネントを利用せず、PHPで直接書いてみました。

コンポーネントを利用せずにBasic認証を実装する

対象のコントローラやアクションに直接記述します。

		// パスワードはConfigureとか定数とかクラス変数などで定義するといいと思います。
		// ここでは変数で書いちゃいます。
		$loginId = 'hoge';
		$loginPassword = 'fuga';

		$this->autoRender = false;
		if (!isset($_SERVER['PHP_AUTH_USER'])) {
			header('WWW-Authenticate: Basic realm="Private Page"');
			header('HTTP/1.0 401 Unauthorized');
			die("id / password Required");
		} else {
			if ($_SERVER['PHP_AUTH_USER'] != $loginId || $_SERVER['PHP_AUTH_PW'] != $loginPassword) {
				header('WWW-Authenticate: Basic realm="Private Page"');
				header('HTTP/1.0 401 Unauthorized');
				die("Invalid id / password combination.  Please try again");
			}
		}
		$this->autoRender = true;
		
		// あとは普通に処理を書く	

ベーシック認証が通るまではautoRenderを切ってます。

ベーシック認証はセキュリティが甘いので、恒久的な認証には向かないし、平文でIDパスワードが送信されないようにSSL下で使うのが好ましいでしょう。

参考にさせていただいたサイト
PHPでBasic認証設定してみた【PHP】 – 麹町で働くWebエンジニアのメモ帳

シェアする

  • このエントリーをはてなブックマークに追加

フォローする