@Sergey_Dultsev

Как решить проблемы c регистрацией посредников (Middleware) в Laravel 11 версии?

Как решить проблемы c регистрацией посредников (Middleware) в Laravel 11 версии?
Проблема с мидлваром а ларке 11 версии.

Есть мидлвар проверки роли админа:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckAdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        if(!Auth()->check() || !Auth()->user()->is_admin){
            return response()->json(['message' => '
User is not an administrator.'], 401);
        }
        return $next($request);
    }
}


Регистрирую в kernel.php:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Routing\Middleware\ThrottleRequests;
use Illuminate\Auth\Middleware\Authenticate;
use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
use App\Http\Middleware\VerifyCsrfToken;
use App\Http\Middleware\CorsAndHeaderMiddleware;
use App\Http\Middleware\CheckAdminMiddleware;

class Kernel extends HttpKernel
{
    protected $middleware = [
        CorsAndHeaderMiddleware::class,
        VerifyCsrfToken::class,
    ];

    protected $middlewareGroups = [
        'api' => [
            EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            SubstituteBindings::class,
            ThrottleRequests::class . ':api',
        ],
    ];

    protected $routeMiddleware = [
        'auth' => Authenticate::class,
        'admin' => CheckAdminMiddleware::class
    ];
}


Как пример сделаю проверку на роль админа при запросе выхода в api.php:

Route::middleware(['auth:sanctum', 'admin'])->group(function () {
    Route::post('/logout', [AuthController::class, 'logout']);
});


Постман выводит такую ошибку " message": "Target class [admin] does not exist."
Я наверное уже все перерыл в интернете и решения нету
  • Вопрос задан
  • 353 просмотра
Решения вопроса 1
pickHabr
@pickHabr
Костыльных дел мастер
Я развернул новый проект лары и скопировал туда твой код, все работает

1. Проверь что путь файла CheckAdminMiddleware.php соответствует неймспейсу
App\Http\Middleware

2. Попробуй сбросить кэш
php artisan cache:clear
composer dump-autoload

3. Если запускаешь проект в докере то убедись что изменения с локали ушли в контейнер

UPD
Не сразу обратил внимание что у меня не 11 лара, установилась Laravel 10

В ларавель 11 больше нет App\Http\Kernel::class (ну наверное его можно притащить туда и какими-то костылями заставить работать, но речь не об этом)

Все конфигурации теперь в bootstrap/app.php
Добавь в bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
...
        $middleware->alias([
            'admin' => App\Http\Middleware\CheckAdminMiddleware::class
        ]);
    })


https://laravel.com/docs/11.x/releases#structure
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы