检索API中间件中的登录用户

时间:2019-01-21 21:17:25

标签: laravel laravel-5 laravel-middleware laravel-nova

我有一个处理API调用的控制器。用户可能具有不同的角色。根据他的角色,他可能会访问API的某些部分。

中间件

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

尽管我使用登录用户来调用API,但是却得到了null。在$request参数中,我都没有用户。我该怎么办?

1 个答案:

答案 0 :(得分:0)

正如你们中提到的那样,api调用不会启动会话,我想这是为了避免CSRF攻击。

一种解决方案是使用passport

  

Laravel使用Laravel Passport使API身份验证变得轻而易举,它可以在几分钟内为您的Laravel应用程序提供完整的OAuth2服务器实现。

另一种可能更脆弱(但就我而言已足够好)的解决方案是在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,

(我从this brief article获得了此解决方案)