Laravel:服务提供商中的经过身份验证的用户

Larvel5: Authenicated user in Service Provider

我创建了 ServiceProvider,并在其中放置了一些构建菜单的逻辑。此逻辑基于经过身份验证的用户。但是,Auth::user() Auth::getUser() 不会工作,看起来会话未启动。

我把我的逻辑放在 boot 方法中。

临时解决问题,我创建middleware并把逻辑放在那里,但我认为这是不正确的。

所以 ServiceProvider 不是这个(类似)逻辑的正确位置?或者在哪里更好地与用户一起工作?

例如:

class MenuServiceProvider extends ServiceProvider {

    public function boot() {
      if(Auth::user()->isAdmin()) { // here Auth::user is null
           $this->createAdminMenu();
      } else {
           $this->createDefaultMenu();
      }
    }
    public function register()
    {
        //
    }

解决了这个问题,同时最近也在努力解决这个问题。正如您在评论中指出的那样,问题是加载服务提供者时会话信息甚至还没有开始——这会带来问题。解决方案是创建一个可以在 Http 内核中配置的中间件 class,它会为每个请求自动加载它。

因此,根据您上面的代码,您可能会得到类似这样的结果:

<?php    
namespace App\Http\Middleware;

use Auth;

class MenuMiddleware
{
    public function handle($request, \Closure $next)
    {
        if(Auth::user()->isAdmin()) { // here Auth::user is null
            $this->createAdminMenu();
        } else {
            $this->createDefaultMenu();
        }

        return $next($request);
    }

    ...
}

然后,在您的 RouteServiceProvider 中 - 只需在全局中间件数组中注册中间件。