laravel 上的 "white list" IP 有问题。也许我对中间件的路由有疑问,或者我对解决问题的方式有误?

Trouble with "white list" IP on laravel. Maybe I have problem with route for middleware or maybe I have mistake way for solution problem?

我在编写中间件路由时遇到了问题。那里没有任何工作。如果使用另一个 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.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'));
}