Laravel 是 PHP 世界中的一個流行框架,為開發人員提供了簡化工作的強大工具。然而,有時這些便利可能會導致意想不到的問題。在這篇文章中,我將討論 Laravel 中的 TrimStrings 中間件如何導致問題以及如何解決這些問題。
TrimStrings 中間件在 Laravel 應用程式中用於自動修剪傳入請求資料(例如表單輸入)中的空格。當使用者不小心在輸入欄位的開頭或結尾留下空格時,這特別有用。例如,如果使用者在表單中輸入“ user@example.com ”,並且電子郵件地址周圍有空格,TrimStrings 中間件將修剪這些空格,確保僅處理“user@example.com” .
此功能有利於防止不必要的空格引起的錯誤以及處理更乾淨的資料。然而,一如既往,在某些特殊情況下,這種預設行為可能會導致意想不到的後果。
在我們與巴西支付提供者整合的專案中,我們需要透過回調系統來擷取和驗證支付結果。付款提供者透過 POST 請求將交易結果傳送到我們的伺服器,我們透過執行簽章/雜湊驗證。
來驗證請求此驗證過程遵循簡單的邏輯:
最初,很難理解為什麼一些有效的請求被拒絕。然而,在檢查 Nginx 日誌後,我們注意到傳入請求中的 full_name 參數保留了尾隨空格。儘管如此,在我們的伺服器上,這些空格已被修剪,導致哈希驗證失敗。這時我們意識到 TrimStrings 中間件導致了這個問題。
為了避免此類問題,需要針對特定路由或請求停用 TrimStrings 中介軟體。 Laravel 8 引入了 TrimStrings::skipWhen 方法,它為這種情況提供了量身定制的解決方案。
以下是如何使用供應商應用此解決方案的範例:
use Illuminate\Foundation\Http\Middleware\TrimStrings; use Illuminate\Http\Request; // ... TrimStrings::skipWhen(function (Request $request) { return $request->is('api/v1/integrations/foo-provider/callback'); });
此程式碼片段會停用特定路由的 TrimStrings 中介軟體。在這種情況下,來自 api/v1/integrations/foo-provider/callback 路由的請求不會發生修剪,確保雜湊驗證過程順利進行。
Laravel 的預設功能通常會讓事情變得更容易,但在某些情況下,它們可能會導致意想不到的結果。因此,了解我們使用的工具如何運作並仔細評估其潛在影響非常重要。雖然 TrimStrings 中間件在大多數情況下是一個有用的工具,但在這種情況下它可能會導致問題。幸運的是,像 TrimStrings::skipWhen 這樣靈活的解決方案可以讓我們避免此類問題。
以上是Laravel 的 TrimStrings 中介軟體如何導致問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!