Я пытаюсь заблокировать доступ определенных IP-адресов к моему веб-сайту с помощью laravel 11.3.0, все решения, с которыми я сталкиваюсь, предполагают, что вы использовали метод регистрации промежуточного программного обеспечения в kernel.php, но версия laravel, которую я использую, не имеет ядра .php. Итак, как мне это сделать?
я попытался зарегистрировать его в app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->web(append: [
\App\Http\Middleware\HandleInertiaRequests::class,
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
]);
$middleware->alias([
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
]);
return $middleware;
})
->withMiddleware([
\App\Http\Middleware\BlockIpMiddleware::class,
])
->withExceptions(function (Exceptions $exceptions) {
//
})
->create();
ОШИБКА Неустранимая ошибка PHP: неперехваченная ошибка типа: Illuminate\Foundation\Configuration\ApplicationBuilder::withMiddleware(): аргумент №1 ($callback) должен иметь тип ?callable, указан массив, вызываемый в C:\xampp\htdocs\swamsite2\Swarmsite\ Daniel\telegram\bootstrap\app.php в строке 29 и определен в C:\xampp\htdocs\swamsite2\Swarmsite\Daniel\telegram\vendor\laravel\framework\src\Illuminate\Foundation\Configuration\ApplicationBuilder.php:227 Трассировки стека: #0 C:\xampp\htdocs\swamsite2\Swarmsite\Daniel\telegram\bootstrap\app.php(29): Illuminate\Foundation\Configuration\ApplicationBuilder->withMiddleware(Array) #1 C:\xampp\htdocs\swamsite2\Swarmsite\Daniel\telegram\artisan(12): require_once('C:\xampp\htdocs...') #2 {основной} добавлено в C:\xampp\htdocs\swamsite2\Swarmsite\Daniel\telegram\vendor\laravel\framework\src\Illuminate\Foundation\Configuration\ApplicationBuilder.php в строке 227
ты имеешь в виду этот? ->withMiddleware(function (Middleware $middleware) { $middleware->web(append: [ \App\Http\Middleware\HandleInertiaRequests::class, \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class, ]);
Правильный. Наверное, это лучшее место для этого.
Laravel 11 обеспечивает разделение групп промежуточного ПО API и веб-интерфейса. В моем случае использования я сделал что-то похожее на это:
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Request;
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
$middleware->web(prepend: [
\App\Http\Middleware\EncryptCookies::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\BlockIpMiddleware::class,
]);
$middleware->api(append: [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class . ':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\BlockIpMiddleware::class,
]);
})->create();
Посмотрите на
withMiddleware
прямо над ним. Фактически, вы можете удалить свойwithMiddleware
и переместить промежуточное ПО в функциюweb()
.