本文根據原始碼調查(
1.x 分支)整理。目前尚無官方文件,仍為正式發佈前的套件(2026 年 4 月時點)。什麼是 Sentinel
Laravel Sentinel 是以 driver 為基礎控制路由存取的安全 middleware 套件。由 Taylor Otwell 與 Mior Muhammad Zaki 開發,支援 PHP ^8.0 / Laravel 8〜13。 主要用途是保護 Telescope、Horizon、Pulse 等管理工具路由。只要對路由套用SentinelMiddleware,就能依 driver 定義的授權邏輯來控制存取。
與傳統方式的比較
Telescope 與 Horizon 各有以gate 為基礎的授權機制。
安裝
composer.json 的 extra.laravel.providers 已註冊 SentinelServiceProvider,Service Provider 會被自動偵測。也不必發佈額外設定檔。
套件架構
預設 driver(Laravel driver)的行為
預設的Laravel driver 只在本機環境(APP_ENV=local)下才進行控制。
私人 IP 判斷
Driver 基底類別的 isPrivateIp() 使用 Symfony 的 IpUtils 判斷以下 IP 範圍為私人 IP:
Docker 本機環境偵測
REMOTE_ADDR 為 127.0.0.1 且專案根目錄存在 .dockerenv 時,判斷為 Docker 本機環境。
作為 middleware 使用
基本用法
指定 driver
可將 driver 名稱作為 middleware 引數。若指定不存在的 driver 會回退到預設 driver(driverOrFallback() 的行為)。
middleware 實作
authorize() 回傳 false 時以 HTTP 401 中止。使用 Driver::authorizeOrFail() 也能拋出 AuthorizationException(middleware 本身未使用)。
建立自訂 driver
繼承Driver 抽象類別並實作 authorize() 方法就能建立自訂 driver。
extend() 的註冊可放在 AppServiceProvider::boot() 等。
活用基底類別的 utility 方法
Driver 類別備有 IP 判斷等便利方法,可從自訂 driver 自由呼叫。
SentinelManager 機制
SentinelManager 繼承 Illuminate\Support\Manager。Manager 是實作 driver pattern 的 Laravel 基礎類別,以 driver() 快取並解析 driver 實例。
driverOrFallback() 即使找不到指定 driver 也會安靜地回退到預設 driver,因此把不存在的 driver 名稱傳給 middleware 引數也不會出錯。
SentinelManager 由 SentinelServiceProvider 註冊為 scoped singleton(scoped),因此在同一請求內 driver 實例會被重用。
總結
laravel/sentinel 雖小,但透過使用 Illuminate\Support\Manager 的 driver pattern 具高擴充性。
預設
Laravel driver 專注於防止本機開發時 tunnel 服務的存取,正式環境的保護需要自行實作自訂 driver。等官方文件完備後,會有更具體的使用模式。
laravel/sentinel 儲存庫
原始碼與最新變更可在 GitHub 的
1.x 分支確認。