laravel 5.1:Auth :: check在ServiceProvider

时间:2016-02-08 17:09:20

标签: php laravel authentication laravel-5 laravel-5.1

我已经在寻找类似的问题,但没有帮助我。 Auth::check始终返回false,Auth::guest始终返回true,auth中间件工作正确(如果用户登录则允许请求继续,如果用户未登录,则将用户重定向到登录页面)。怎么了?

编辑: 我知道它发生在提供程序启动方法中,所以问题是:如何在提供程序启动方法中检查用户登录状态? 这是我的提供程序引导方法,它在所有视图中共享菜单:

 public function boot(MenuController $menu_controller)
{
   //dd(\Auth::check()) DOES NOT WORK HERE

    $nav_menu = $menu_controller::roots()->get();

    view()->share('nav_menu',$menus);
}

2 个答案:

答案 0 :(得分:2)

Auth::check()正在使用会话来检查User是否已通过验证。

在Laravel中,会话通过中间件初始化,所有中间件在服务提供商启动阶段后执行

因此,在您的服务提供商中,您无法访问会话:它尚未初始化

解决方案是检查身份验证并在中间件中完成工作,并在此之后执行此中间件:

\Illuminate\Session\Middleware\StartSession::class

这是启动会话的middelware

答案 1 :(得分:0)

我有同样的问题,我解决了它

这是我如何解决它的 在我的服务提供商   `

public function boot()
    { 
         view()->composer('partial.navbar', function($view) {
                $view->with('variabelToNavbar', $this->getVariable());
         });
    }



private function getVariable()
{
   if(\Auth::check()) {
          //some code u want
   }
}
'

所以诀窍是用servide提供程序中的函数检查auth .. 它不整洁但它对我有用