iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

我推的Laravel系列 第 10

【Day- 9】我推的Laravel-基礎篇-Middlware

  • 分享至 

  • xImage
  •  

簡介

Laravel 中的中介層(Middleware)用於處理 HTTP 請求在進入您的應用程序之前或之後的不同階段。它允許您在請求和回應之間執行自定義代碼,並可用於各種用途,例如身份驗證、授權、日誌記錄、輸入驗證等。中介層是 Laravel 應用程序的重要組成部分,它有助於保持代碼的結構性和可維護性。

以下是 Laravel 中使用中介層的一些常見用途:

  • 身份驗證(Authentication):您可以使用中介層來確保只有已經登入的用戶能夠訪問特定路由或資源。Laravel 提供了內建的 auth 中介層,用於處理身份驗證。
  • 授權(Authorization):中介層可以用於確保用戶在訪問某些資源時具有足夠的權限。您可以根據應用程序的需要定義自己的授權中介層。
  • 輸入驗證(Input Validation):您可以使用中介層來驗證從用戶接收到的輸入數據,以確保它符合您的應用程序的需求,並且是有效的和安全的。
  • 日誌記錄(Logging):中介層可用於記錄請求和回應的信息,以便日誌記錄和監控應用程序的運行狀況。
  • 緩存(Caching):您可以使用中介層來緩存特定的請求或回應,以提高性能並減輕伺服器負載。
  • 跨站請求偽造(CSRF)保護:Laravel 的 VerifyCsrfToken 中介層用於保護您的應用程序免受跨站請求偽造攻擊。

中介層通常以中介層類或中介層函數的形式定義,並且可以在路由或控制器中使用。它們允許您在請求處理的不同階段插入自定義邏輯,以確保您的應用程序正確、安全地運行。

前面我們已經有看過CSRF的功能了,今天來自己寫一個簡易的Middleware
功能是在收到請求回應時紀錄Log

實作

php artisan make:middleware {你的Middlware名稱}

依照其他Middleware,不用在檔案後加上Middleware,所以這裡命名為RequestResponseLogger

app\Http\Middleware\RequestResponseLogger.php
https://ithelp.ithome.com.tw/upload/images/20230924/20163286IcaDzmo57v.png

// 在處理請求之前,記錄傳入請求的信息
Log::info('Request:', [$request]);

// 傳遞請求給下一個中介軟體
$response = $next($request);

// 在回傳響應之前,記錄回傳響應的信息
Log::info('Response:', [$response]);

return $response;

app\Http\Kernel.php
https://ithelp.ithome.com.tw/upload/images/20230924/20163286FRcFMQU713.png

\App\Http\Middleware\RequestResponseLogger::class,

如果要每一個Request都經過這個Middlware,那就放在**$middleware**這個Array中(如上圖)
另外也可以定義Middleware名稱,在想要經過的Request中加入,如下
app\Http\Kernel.php
https://ithelp.ithome.com.tw/upload/images/20230924/20163286flwag6gohF.png
(如果上面已經加入到$middleware,這裡記得先把$middleware裡面的註解)

routes\web.php
https://ithelp.ithome.com.tw/upload/images/20230924/20163286nfLmVQaSx5.png

這時候在進入/posts頁面時,就可以紀錄log了
log位置預設在
storage\logs\laravel.log
https://ithelp.ithome.com.tw/upload/images/20230924/20163286Dg0S2QQ8Ag.png

維護模式(PreventRequestsDuringMaintenance)

筆者在寫這篇時,有發現這個有趣的Middleware
如果在終端上打:

php artisan down

整個網站都會進入維護模式,出現503 SERVICE UNAVAILABLE
https://ithelp.ithome.com.tw/upload/images/20230924/20163286me62aLNpr4.png

這時候輸入

php artisan up

就能恢復囉

總結

先前提到的流程大概是
使用者→View→Controller→Model
如果加入Middleware,大概會是
使用者→Middleware→View→Middleware→Controller→Model

如果以先前餐廳的舉例,就是在收到顧客訂單前
先檢查是否可接受這個訂單
如果是維護模式,就代表餐廳正在裝修XD
是不是有趣許多、有沒有更清楚Middleware的定義呢


上一篇
【Day- 8】我推的Laravel-基礎篇-Validation (輸入資料驗證)
下一篇
【Day- 10】我推的Laravel-基礎篇-Testing (with Fake)
系列文
我推的Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言