laravel - laravel 上的“白名单”IP 有问题。也许我对中间件的路由有问题,或者我对解决问题有错误的方式?
问题描述
我在中间件的书面路线上遇到了麻烦。那里没有任何工作。如果使用另一个 IP 我的任务 - 白名单,我仍然可以看到页面。当我访问没有访问 IP 的资源时,它将在另一个页面上路由。我使用中间件
<?php
namespace App\Http\Middleware;
use Closure;
class FilterIps
{
const ALLOWED = [
'1.1.1.1',
];
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
abort_unless(in_array($request->ip(), self::ALLOWED), 403);
return $next($request);
}
}
添加到内核文件:
protected $middlewareGroups = [
'web' => [
FilterIps::class,
],
];
我在网上的路线。也许他不正确?或者我的任务可能没有正确的解决方案?
Route::group(['middleware' => 'web'], function () {
Route::get('/demo/loginjs', function () {
return view('auth.login');
});
});
解决方案
如果你想这样使用它
Route::group(['middleware' => 'web'], function () {
您需要将中间件添加到protected $routeMiddleware
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
//...
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'filter' => \App\Http\Middleware\FilterIps::class,
];
那么你可以使用它
Route::group(['middleware' => 'filter'], function () {
Route::get('/demo/loginjs', function () {
return view('auth.login');
});
});
如果您希望它出现在 中的所有路由上web.php
,请将其添加到 web 组而不调用它web.php
,它将应用于它们。
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
//...
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\FilterIps::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
如果您想知道为什么不需要将其添加到web.php
文件中,答案就在\App\Providers\RouteServiceProvider::class
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace('App\Http\Controllers')
->group(base_path('routes/web.php'));
}
推荐阅读
- c# - 如何使用单例类在 2 个视图模型之间发送 EventAggregator
- c++ - 为什么 std::sort 期望一个索引超过 C++ 中数组的最后一个索引?
- python-3.x - 在 spark python 中重命名数据框列
- javascript - 如何将 React Hooks 调度包装到组件外部的函数中
- flutter - 缓存数据(冗余 API 调用)
- php - Sylius [管理员] 如何直接在存储库功能中获取登录用户详细信息
- mysql - 用聚合计算 SQL
- flutter - 如何以实际逻辑像素获取绘制图像的大小?
- unix - 比较两个文件的字段
- postgresql - 为 postgreSql 安装 pg_profile