PHPでBasic認証を設定する方法
サイト制作でフロントチームからサーバーサイド(PHP)でBasic認証をかけてほしいと要望があり、意外なところで沼ったのでメモ。
Basic認証を設定したいページの先頭で下記をコピペすればOKです。
<?php
// Basic認証 設定値
$BASIC_AUTH_USER = 'user';
$BASIC_AUTH_PASSWORD = 'pass';
// リクエストから取得したユーザー名とパスワードを検証
if (
!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
$_SERVER['PHP_AUTH_USER'] !== $BASIC_AUTH_USER || $_SERVER['PHP_AUTH_PW'] !== $BASIC_AUTH_PASSWORD
) {
// 認証が失敗した場合、ベーシック認証を要求
header('WWW-Authenticate: Basic realm="Restricted Area"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authentication required';
exit;
}
?>
以上。
認証画面が繰り返し表示される場合
Basic認証は設定できたが、正しい値を入力しても認証画面が繰り返し表示される時は.htaccessに以下を追記すると改善する可能性があります。(レンタルサーバーでありがち)
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
うぇぶとまと
この記事を書いたキッカケがこれ。「認証画面が繰り返し表示される」です。今まで普通に使えてたもんで.htaccessのことを完全に失念してて地味に沼った。
飲食→派遣→IT系ベンチャーに転職。
本業をベーシックインカムとし、やりたい事に挑戦するWebエンジニア。