Получить зарегистрированного пользователя в промежуточном программном обеспечении API - PullRequest
0 голосов
/ 22 января 2019

У меня есть контроллер, который обрабатывает вызовы API.Пользователь может иметь разные роли.В соответствии с его ролью (ами) он может получать доступ к частям API или нет.

Middleware

class CheckUserRole
{
    public function handle($request, Closure $next, string $role)
    {
        if(\Auth::check()) {
           :
        }
    }
}

Хотя я вызываю API с вошедшим в систему пользователем,Я получаю ноль.В параметре $request у меня нет пользователя.Что я делаю не так?

1 Ответ

0 голосов
/ 23 января 2019

Как некоторые из вас упоминали, вызов API не запускает сеанс, я полагаю, что это делается для того, чтобы избежать атак CSRF.

Одним из решений является использование паспорта :

Laravel упрощает аутентификацию API, используя Laravel Passport, который обеспечивает полную реализацию сервера OAuth2 для вашего приложения Laravel за считанные минуты.

Другое решение, возможно, более уязвимое (но в моем случае достаточно хорошее) - это начать сеанс по вызову API. Для этого вам нужно изменить app/Http/Kernel.php:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

И добавить к 'api' запись следующего промежуточного программного обеспечения:

\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,

(я взял это решение из этой краткой статьи )

...