php laravel 5.5在构造函数中获取用户详细信息

beq87vna  于 2023-04-04  发布在  PHP
关注(0)|答案(3)|浏览(110)

我正在构建一个具有多个用户角色和操作的应用程序。我确实遵循了laravel官方文档(https://laravel.com/docs/5.5/middleware#middleware-parameters)。
但是在我的控制器的构造函数中(从那里我调用上面的中间件),我使用Auth facade来获取用户的详细信息。我知道如何使用Auth facade,我已经在我的应用程序中的几个地方实现了它。但是当我在构造函数中使用它时,它返回null(在登录条件下-我仔细检查了一下)。
我是这样实现的,我必须调用两个控制器(因为只有注册用户才能访问那个页面)

public function __construct()
{
    $role = Auth::user()->role;
    $this->middleware('auth');
    $this->middleware('checkRole:$role');
}

PS:我尝试将$role变量初始化为protected并且在构造函数之外,仍然不起作用。任何建议都将有所帮助
谢谢大家。

0md85ypi

0md85ypi1#

这是因为构造函数是在中间件之前创建的,这就是为什么它返回null。
这个答案可能会解决你的问题:Can't call Auth::user() on controller's constructor

qlzsbp2j

qlzsbp2j2#

如果你使用同一个用户表来表示“front-end”用户和“admin”用户&希望在admin控制器的构造函数中应用条件。
你可以在下面使用。

auth()->user()

在构造函数中,你可以使用下面的代码。

public function __construct(){      
    $this->middleware(function ($request, $next) {      
        if(auth()->user()->hasRole('frontuser')){
            return redirect()->route('home')->withFlashMessage('You are not authorized to access that page.')->withFlashType('warning');
        }
        return $next($request);
    });
}

但我更喜欢在单独的中间件类中处理这些,而不是在控制器构造函数中编写这些。

iq0todco

iq0todco3#

在Http/Kernel.php文件中移动此行

\Illuminate\Session\Middleware\StartSession::class

从$middlewareGroups到$middleware。
然后你可以在构造函数中获取Auth

相关问题