CodeIgniterにベーシック認証をかける方法

公開用index.php(public/index.php)の、ENVIRONMENT定義直後あたりに、以下を追記。
ベーシック認証で、【ユーザ名】が一致している場合のみ通過します。もしも、パスワードも設定したい場合は、$_SERVER[‘PHP_AUTH_PW’]を使って設定して下さい。

        if (isset($_SERVER['PHP_AUTH_USER'])){
            if($_SERVER['PHP_AUTH_USER']=="【ユーザ名】"){
                // OK
            }else{
                header("HTTP/1.0 401 Unauthorized");
                header("WWW-authenticate: basic realm=\"Login Auth\"");
                exit("Cannot Authrization");
            }
        }else{
            header('WWW-Authenticate: Basic realm=""');
            header('HTTP/1.0 401 Unauthorized');
            header('Content-type: text/html; charset='.mb_internal_encoding());
            exit();
        }

私は、ENVIRONMENT定義のついでにベーシック認証をかけて、開発環境と本番環境を切り替えたりしています。
例えば、以下のように、SERVER_NAMEが192.168.34.10(ローカル環境)だとベーシック認証がかかって、それ以外だとかからないようにしてる感じです。

if($_SERVER["SERVER_NAME"]=="192.168.34.10"){
	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
	if (isset($_SERVER['PHP_AUTH_USER'])){
		if($_SERVER['PHP_AUTH_USER']=="【ユーザ名】"){
		// OK
		}else{
			header("HTTP/1.0 401 Unauthorized");
			header("WWW-authenticate: basic realm=\"Login Auth\"");
			exit("Cannot Authrization");
		}
	}else{
		header('WWW-Authenticate: Basic realm=""');
		header('HTTP/1.0 401 Unauthorized');
		header('Content-type: text/html; charset='.mb_internal_encoding());
		exit();
	}

}else{
	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');
}

ただ、セキュリティ上、ベーシック認証を信用するものではないので、あくまで「クライアントだけにwebページを見せたい」ぐらいのゆるーい認証下でお使いになることをおすすめいたしますー。
それでは、また。

お問い合わせ