I use Laravel 5.2 and have a problem with middleware. There is the code in the routes.php
use IlluminateContractsAuthAccessGate; Route::group(['middleware' => 'web'], function () { Route::auth(); Route::get('/', 'HomeController@index'); }); Route::group(['prefix'=>'admin', 'middleware' => 'admin'], function(){ Route::get('/', function(){ return view('admin.index'); }); Route::get('/user', function(){ return view('admin.user'); }); });
Kernel.php:
protected $routeMiddleware = [ ... 'admin' => AppHttpMiddlewareAdminPanel::class, ];
AdminPanel.php
namespace AppHttpMiddleware; use Closure; use IlluminateSupportFacadesAuth; use AppRole; class AdminPanel { public function handle($request, Closure $next) { $user = Auth::user(); dd($user); if($user){ $role = Role::whereName('admin')->first(); if($user->hasRole($role)){ return $next($request); } } return redirect('/'); }
So,
$user = Auth::user
()
always return null.
Thanks for suggestions!
Any route that uses
Auth()
must be encapsulated in theweb
middleware. You're close, just move yourRoute::group(['prefix' => 'admin'], ...)
into the group above.