获取用户信息时出现问题

时间:2019-06-05 20:10:42

标签: laravel backpack-for-laravel

我正试图阻止某些用户访问管理面板。 我已经使用此代码创建了一个名为RequireAdminRole的中间件

public function handle($request, Closure $next, $guard = null)
{
    $user = Auth::user();

    dd($user);

    if (!$user) {
        return $next($request);
    }

    if (!$user->hasRole('Admin')) {
        // if your sessions are decoupled from the frontend
        // you can even logout the user like so:
        // auth()->logout();

        abort(403, 'Access denied');
    }

    return $next($request);
}

我已将其添加到kernel.php

'web' => [
        \App\Http\Middleware\RequireAdminRole::class,
        \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,
    ],

我的问题ID $ user为空值,所以我无法获得用户权限。 有人可以帮我吗?

最诚挚的问候。

1 个答案:

答案 0 :(得分:4)

中间件的顺序很重要,中间件处理程序按照定义的顺序执行。这意味着您正在尝试执行StartSession中间件之前从会话中检索经过身份验证的用户。

因此,要解决您的问题,应将RequireAdminRole中间件移到数组的末尾,或者至少移到StartSession的定义之后。

'web' => [
    // Other middleware definitions...
    \App\Http\Middleware\RequireAdminRole::class
],