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