Laravel 5.3 auth check in конструктор возвращает false

Я использую Laravel 5.3 и я пытаюсь получить идентификатор аутентифицированного пользователя в методе constructor чтобы я мог фильтровать пользователя по назначенной компании следующим образом:

 namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Support\Facades\View; use App\Models\User; use App\Models\Company; use Illuminate\Support\Facades\Auth; class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests ; public $user; public $company; public function __construct() { $companies = Company::pluck('name', 'id'); $companies->prepend('Please select'); view()->share('companies', $companies); $this->user = User::with('profile')->where('id', \Auth::id())->first(); if(isset($this->user->company_id)){ $this->company = Company::find($this->user->company_id); if (!isset($this->company)) { $this->company = new Company(); } view()->share('company', $this->company); view()->share('user', $this->user); } } 

Однако это не возвращает id пользователя. Я даже попробовал Auth::check() и он не работает.

Если я Auth::check() из метода __construct() то это работает следующим образом:

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HomeController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { parent::__construct(); $this->middleware('auth'); } /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { dd(\Auth::check()); return view('home'); } } 

Однако это не удается, если я поместил это в метод построения в HomeController тоже!

Любые идеи, почему это не удается?

Solutions Collecting From Web of "Laravel 5.3 auth check in конструктор возвращает false"

документы

вы не можете получить доступ к сеансу или аутентифицированному пользователю в конструкторе вашего контроллера, потому что промежуточное программное обеспечение еще не запущено.

В качестве альтернативы вы можете определить промежуточное ПО, основанное на Closure, непосредственно в конструкторе вашего контроллера. Прежде чем использовать эту функцию, убедитесь, что в вашем приложении работает Laravel 5.3.4 или выше:

 class ProjectController extends Controller { /** * All of the current user's projects. */ protected $projects; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware(function ($request, $next) { $this->projects = Auth::user()->projects; return $next($request); }); } } 

Поскольку 5.3 Auth::check не будет работать в конструкторе контроллера, это одно из недокументированных изменений. Таким образом, вам нужно перенести его в промежуточное программное обеспечение или проверить методы контроллера или переместить проект в 5.2.x.

Он терпит неудачу, потому что вы вызываете $this->middleware('auth'); после parent::__construct(); , Это означает, что ваше промежуточное программное обеспечение не загружено должным образом.