## 在何處使用中間件
中間件可以放置在路由文件和控制器的構造函數中,推薦放在控制器的構造函數中,這樣我們每寫一個方法,它自動被中間件保護起來.
#### 使用Auth中間件
__construct 是 PHP 的構造器方法,當一個類對象被創建之前該方法將會被調用。我們在 __construct 方法中調用了 middleware 方法,該方法接收兩個參數,第一個為中間件的名稱,第二個為要進行過濾的動作。我們通過 except 方法來設定 指定動作 不使用 Auth 中間件進行過濾,意為 —— 除了此處指定的動作以外,所有其他動作都必須登錄用戶才能訪問,類似于黑名單的過濾機制。相反的還有 only 白名單方法,將只過濾指定動作。我們提倡在控制器 Auth 中間件使用中,首選 except 方法,這樣的話,當你新增一個控制器方法時,默認是安全的,此為最佳實踐。這樣在該控制器中除了"register"和"login"之外所有方法都會受到auth中間件的保護,因為在注冊和登錄的場景下不需要對用戶的身份進行驗證.Laravel 提供的 Auth 中間件在過濾指定動作時,如該用戶未通過身份驗證(未登錄用戶),默認將會被重定向到 /login 登錄頁面。
~~~
public function __construct()
{
$this->middleware('auth',[
'except' =>['register','login']
]);
}
~~~
也可以在控制器中使用多個控制器
~~~
public function __construct()
{
$this->middleware('auth', [
'except' => ['show', 'create', 'store'] //auth中間件不應用于這三個方法
]);
$this->middleware('guest', [
'only' => ['create'] //guest 中間件只應用于create方法
]);
}
~~~
上面新增了一個中間件,只允許未登陸的用戶訪問注冊頁面,而已經登陸的用戶無法訪問該頁面,因為不符合邏輯.