# 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` 就必须要登录,否则就跳到登录页面。 效果图如下: ![](https://box.kancloud.cn/e3a8e5d8b80bfa7a174d88516c743e1b_2230x1210.gif) 完结。