在 Laravel 框架中,中间件是一种用于处理 HTTP 请求的组件。它允许你在请求进入 路由 处理 之前 或 之后 执行一些代码逻辑。
中间件的优势和功能
处理身份验证:验证用户是否已经登录或者检查用户是否有权限访问特定的路由
记录日志:记录请求的日志,以便了解请求的轨迹。
访问控制:确保请求是从指定 IP 地址发送的,或仅限于特定用户组。
数据验证:验证请求的数据是否符合指定的格式。
数据处理:对请求的数据进行处理,例如编码数据或对数据进行加密。
缓存:中间件可以使用缓存,以提高请求的速度和效率。
安全:中间件可以防止安全漏洞,例如跨站请求伪造(CSRF)攻击。
权限控制:中间件可以控制用户的访问权限,确保安全性。
认证:中间件可以实现认证和授权逻辑。
我们将在下面一一展示四个用途实例!!!!!
使用 make:middleware 命令来创建新的中间件:
php artisan make:middleware CheckAge
如果你是一个小白,请先移步中间件 | 基础功能 |《Laravel 7 中文文档 7.x》| Laravel China 社区了解之后欢迎回来。
路径地址:app\Http\Middleware\你创建的中间件文件:
public function handle(Request $request, Closure $next)
{
// 在请求进入路由处理之前执行的代码
// 可以在这里对请求进行一些处理或检查,然后决定是否继续执行路由处理
// 例如,可以在这里检查用户是否已登录,如果未登录则重定向到登录页面
// 执行下一个中间件或路由处理程序
return $next($request);
}
路径地址:app/Http/Kernel.php 注册中间件
找到 middleware 数组 和 routeMiddleware 数组 。将以下代码添加到middleware数组中:
注册全局中间件很简单,只需在 app/Http/Kernel.php
文件中的 $middleware
属性中列出这个中间件即可
protected $middleware = [
// ...
\App\Http\Middleware\ExampleMiddleware::class,
];
写在$routeMiddleware
下。
protected $routeMiddleware = [
// ...
'example.middleware' => \App\Http\Middleware\ExampleMiddleware::class,
];
Route::get('/example', 'ExampleController@index')->middleware('example.middleware');
//当访问/example路由时,ExampleMiddleware中间件将首先被执行。
访问控制:您可以使用中间件确保请求是从指定 IP 地址发送的,或仅限于特定用户组。
下面是测试结果:
年龄小于18 未经授权
年龄大于等于18 ,欢迎您!
上面的代码实现了一个中间件,该中间件会检查请求中的年龄字段。如果年龄小于 18,则会返回错误信息,表示该请求未授权。
日志记录效果
现在,每当请求被处理时,都会记录请求的信息。您可以在 storage/logs 目录中查看请求日志。
通过使用中间件记录请求日志,您可以方便地了解请求的轨迹,并且如果发生错误,您还可以使用日志来调试问题。
测试效果
失败
我们使用了Laravel的Validator类进行验证,通过调用make方法并传入请求数据和验证规则来创建一个验证器。
如果验证失败,则返回一个400状态码和错误信息的JSON响应。
如果验证通过,则继续执行请求,通过调用$next方法并传入请求。
加密的数据
对请求中的数据进行加密处理。我们使用了 encryptData 方法对数据进行加密,该方法的具体实现在其中。
当请求通过此中间件时,它会处理请求中的数据,并将处理后的数据重新写入请求,最后返回请求以便继续处理。
请看文章最上面
使用 Artisan 命令行工具生成中间件,注册中间件。修改生成的中间件文件。使用中间件
创建中间件注册中间件分配中间件然后根据需求进行使用
请看文章最上面
使用 Artisan 命令行工具生成中间件
在 Laravel 中,可以通过在 HTTP 请求的生命周期中加入中间件来将其作为请求处理的一个环节。要将中间件作为请求处理的一个环节,需要执行以下步骤:
创建中间件:使用 Laravel 命令行工具创建中间件。
注册中间件:在应用程序的 HTTP 请求生命周期中注册中间件。
定义中间件处理逻辑:在中间件类中定义处理逻辑。
分配中间件:在路由或控制器中分配中间件,以指定其对特定请求的作用。
在请求流经中间件之前,Laravel 会先对请求进行预处理。在中间件处理请求后,如果中间件允许请求继续,则请求将继续到下一个环节。如果中间件不允许请求继续,则请求将终止。因此,中间件可以通过控制请求的流向来控制请求的处理。
中间件可以支持跨请求共享数据。但具体实现方式取决于使用的 Web 框架和语言。
例如,在 Laravel 框架中,可以使用会话存储来在多个请求之间共享数据。此外,还可以使用全局变量或缓存存储来共享数据
中间件可以控制请求的流向通过对请求进行预处理并决定是否继续传递请求或响应。中间件通过检查请求的状态或内容并执行相应的处理来实现请求的控制。
例如,在 Laravel 中,您可以使用中间件来检查用户是否已登录,如果没有登录,则不传递请求,并将用户重定向到登录页面。此外,中间件还可以用于检查用户是否具有指定的权限,并在必要时阻止请求的流向。
因此,通过使用中间件,可以控制请求的流向,确保应用程序的安全性和数据一致性。
我曾在后台租房管理中写过中间件的访问权限。根据访问的用户和权限进行判断。没有的进行拦截。这样做的好处就是可以保证我们租房系统管理后台的安全性,让安全性能大大提高
参考网址:
laravel中文手册
探索 Laravel 中间件的力量:理解其功能和优势