PEAR Auth_HTTP 提供開箱即用的 HTTP 認證(Basic/Digest),支援多種儲存後端(資料庫、檔案、LDAP 等),適合快速為舊專案或內部工具加上存取控制。
pear install Auth_HTTP
# 或 composer
composer require pear/auth_http
CREATE TABLE test_http (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE,
passwd VARCHAR(255) NOT NULL,
userid INT,
telephone VARCHAR(20),
email VARCHAR(100)
);
<?php
require_once 'Auth/HTTP.php';
$options = [
'dsn' => 'mysql://root:password@localhost/test', // PDO DSN 格式
'table' => 'test_http',
'usernamecol' => 'name',
'passwordcol' => 'passwd',
'cryptType' => 'md5', // 密碼雜湊:md5, sha1, plain 等
'db_fields' => '*', // 額外欄位載入至 Auth 物件
];
$auth = new Auth_HTTP('DB', $options);
$auth->setRealm('Admin Area'); // 瀏覽器彈窗標題
$auth->setCancelText('Error 401: Unauthorized'); // 取消/失敗訊息
$auth->start(); // 開始認證流程
if ($auth->getAuth()) {
// 認證成功
echo "Hello, {$auth->username}!";
// 取得額外欄位
echo "User ID: " . $auth->getAuthData('userid');
echo "Email: " . $auth->getAuthData('email');
} else {
// getAuth() 為 false 時,start() 已送出 401 標頭並 exit
// 此處程式碼不會執行
}
?>
| 選項 | 說明 |
|---|---|
db_fields | 指定額外欄位,以逗號分隔或 '*' 全部,可用 getAuthData() 取得 |
cryptType | md5, sha1, plain, crypt 或自訂回呼函式 |
sessionSharing | 是否共享 PHP Session,預設 true |
authoritative | true 時 Auth 失敗直接 exit,false 可自行處理 |
$options['digest'] = true; // 啟用 Digest
$auth = new Auth_HTTP('DB', $options);
// 密碼欄位需儲存 HA1 = MD5(username:realm:password)
// 可用 Auth_HTTP::getAuthData() 計算
在需保護的腳本最頂端 require_once 'auth.php';,auth.php 內含上述認證邏輯。若使用前端控制器模式,可在路由中間件執行。
Auth_HTTP 適合:內部管理介面、快速原型、舊系統最小改動加鎖。生產環境面向用戶的系統,請採用完整認證授權框架。