Auth :: user () возвращает null

Я использую Laravel 5.2 и имею проблему с промежуточным программным обеспечением. Есть код в route.php


     использовать Illuminate \ Contracts \ Auth \ Access \ Gate;


     Route :: group (['middleware' => 'web'], function () {

         Route :: Auth ();

         Маршрут :: get ('/', 'HomeController @ index');
     });


     Route :: group (['prefix' => 'admin', 'middleware' => 'admin'], function () {
         Маршрут :: get ('/', function () {
             return view ('admin.index');
         });
         Маршрут :: get ('/ user', function () {
             return view ('admin.user');
         });
     });

Kernel.php:


     protected $ routeMiddleware = [
     ...
      'admin' => \ App \ Http \ Middleware \ AdminPanel :: класс,
     ];

AdminPanel.php


     пространство имен App \ Http \ Middleware;


     использование Закрытие;
     используйте Illuminate \ Support \ Facades \ Auth;
     использовать App \ Role;

     класс AdminPanel
     {
         дескриптор публичной функции ($ request, Closure $ next)
         {
             $ user = Auth :: user ();
             дд ($ пользователю);

             если ($ пользователю) {
                 $ role = Role :: whereName ('admin') -> first ();
                 если ($ user-> hasRole ($ роль)) {
                     return $ next ($ request);
                 }
             }
             return redirect ('/');
         }

Так,

 $user = Auth::user () 

всегда возвращать null. Спасибо за предложения!

Любой маршрут, использующий Auth() должен быть инкапсулирован в промежуточное программное обеспечение. Вы близки, просто переместите свою Route::group(['prefix' => 'admin'], ...) в группу выше.

 Route::group(['middleware' => 'web'], function () { Route::auth(); Route::get('/', 'HomeController@index'); // Moving here will ensure that sessions, csrf, etc. is included in all these routes Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){ Route::get('/', function(){ return view('admin.index'); }); Route::get('/user', function(){ return view('admin.user'); }); }); }); 

Я столкнулся с ситуацией, когда Auth::user() всегда возвращает null , потому что я пытался получить User в конструкторе контроллера.

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

В качестве альтернативы вы можете определить промежуточное ПО, основанное на Closure, непосредственно в конструкторе вашего контроллера.

 namespace App\Http\Controllers; use App\User; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\Controller; class ProjectController extends Controller { protected $user; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware(function ($request, $next) { $this->user = Auth::user(); return $next($request); }); } }