# 16. 用中間件來限制用戶必須登錄
有時候我們經常會控制一些頁面需要登錄才能訪問,這個功能在 laravel 如何做到呢?
就是用中間件,只需要四個步驟。
現在我們來演示一下。
## 1. 生成 middleware
先生成 middleware 文件,使用下面的命令:
```
$ php artisan make:middleware AuthenticatedMiddleware
```
這樣會生成一個文件:'app/Http/Middleware/AuthenticatedMiddleware.php'。
## 2. 修改 middleware
把這個文件打開,修改如下:
```
// 'app/Http/Middleware/AuthenticatedMiddleware.php'
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AuthenticatedMiddleware
{
public function handle($request, Closure $next)
{
if(Auth::check())
return $next($request);
return redirect('/login');
}
}
```
上面的 `handle` 方法的大致意思是用戶只要登錄過 (Auth::check()) 就可以繼續進行下面的訪問 ($next),否則的話,就跳到 `/login` 頁面,也就是登錄頁面。
## 3. 引入中間件
寫了中間件,我們要讓系統引入它。
打開 `app/Http/Kernel.php` 文件,找到 `$routeMiddleware` 部分,添加下面一行:
```
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class
```
最終效果如下所示:
```
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
...
'authenticated' => \App\Http\Middleware\AuthenticatedMiddleware::class
];
```
這里我們定義了中間件的名稱為 `authenticated`。
## 4. 使用中間件
最后,我們來使用這個新創建的中間件。
打開路由配置文件 `routes/web.php`。
把 `Route::get('users', 'UsersController@index');` 修改成下面這樣:
```
Route::get('users', 'UsersController@index')->middleware('authenticated');
```
最終的效果是這樣:一旦用戶訪問 `/users` 就必須要登錄,否則就跳到登錄頁面。
效果圖如下:

完結。
- 0. 介紹
- 1. php 開發環境安裝
- 2. 跑 laravel 的 hello world
- 3. 第一個路由 UsersController
- 4. 在數據庫中創建一條數據
- 5. 簡單的用戶認證
- 6. 修改 User model
- 7. User model 的 getter 方法
- 8. view 的更多知識
- 9. 在 view 中共享變量
- 10. blade layout
- 11. 使用 @include 來整理 view
- 12. Blade if/else/unless/or
- 13. factories, faker and seeding
- 14. Blade foreach
- 15. 分頁
- 16. 用中間件來限制用戶必須登錄
- 17. Route group
- 18. CURD 實踐之改變用戶表結構
- 19. CURD 實踐之為新添加的屬性修改注冊功能
- 20. CURD 實踐之用 username 來代替 email 登錄
- 21. CURD 個人中心頁面
- VIM 的 laravel 插件
- VIM 中有效地查看 php 源碼