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

时间:2015-02-10 07:32:32

标签: laravel laravel-5

我创建了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()
    {
        //
    }

1 个答案:

答案 0 :(得分:0)

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

因此,根据上面的代码,您可能会遇到以下情况:

<?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中 - 只需在全局中间件数组中注册中间件。