我已经在寻找类似的问题,但没有帮助我。
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);
}
答案 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 .. 它不整洁但它对我有用