Wednesday 4 December 2019

php - Auth::user() returns null



I use Laravel 5.2 and have a problem with middleware.
There is the code in the routes.php






use Illuminate\Contracts\Auth\Access\Gate;


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' => \App\Http\Middleware\AdminPanel::class,
];



AdminPanel.php





namespace App\Http\Middleware;



use Closure;
use Illuminate\Support\Facades\Auth;
use App\Role;

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!

Answer



Any route that uses Auth() must be encapsulated in the web middleware. You're close, just move your Route::group(['prefix' => 'admin'], ...) into the group above.



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');
});
});
});

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...