Basic認証設定を管理画面から行える Movable Type プラグインを作った。
公開日 : 2014-05-22 18:04:42
管理画面から設定できたらいいよねぇってことで作ってみた。プラグイン設定から、ユーザー名とパスワードの設定ができます。
.htaccessで設定とか、.htpasswdをターミナルで生成とかやっぱり敷居高いもんな、とか思ったんだけども、Perl CGIでは $ENV{ 'HTTP_AUTHORIZATION' } はどうもデフォルトでは取得できないみたいで。
.htaccess に追加
IIS や nginx では未確認。こんな指定するくらいなら素直にBasic認証の設定を入れるよって? そりゃそうだ。まぁ何かの参考に、備忘録として。
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
関係(何とだ)しそうなところだけコードを貼っておく。
if ( my $auth = $app->get_header( 'AUTHORIZATION' ) ) {
my @auths = split( /\s/, $auth );
$auth = $auths[ 1 ];
$auth = MIME::Base64::decode_base64( $auth );
@auths = split( /:/, $auth );
if ( scalar( @auths ) == 2 ) {
my $username = $auths[ 0 ];
my $password = $auths[ 1 ];
if ( ( $username eq $auth_username ) &&
( $password eq $auth_password ) ) {
$authrized = 1;
}
}
}
if (! $authrized ) {
$app->logout();
$app->delete_param( 'username' );
$app->delete_param( 'password' );
$app->user( undef );
$app->response_code( '401' );
$app->set_header( 'WWW-Authenticate', 'Basic realm="Please enter your ID and Password"' );
}
MT::Appの知られざる? メソッド
$app->response_code
レスポンスコードをセットする。
$app->set_header
カスタムHTTPレスポンスヘッダを追加指定する。
$app->delete_param
パラメタを削除する。