# 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)
完结。
- 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 源码