I am trying to make a middleware for different type of users in my Laravel 5.2 app.
So, what is I am doing is making different middlewares for different users.
As far as I am knowing Auth::check() will not work without musing middleware web from here.
So, what I have done is-
routes.php
Route::group(['middleware' => ['web','admin']], function ()
{
//suspend, activate, delete
Route::get('users', [
'uses' => 'AdminController@users',
'as' => 'users'
]);
//Edit,activate,suspend, delete
Route::get('articles', [
'uses' => 'AdminController@articles',
'as' => 'articles'
]);
});
AdminMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check())
{
return "asd";
//return Auth::user();
//return redirect('home');
}
else
{
return redirect('login');
}
//now return the valid request
return $next($request);
}
}
Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'user' => \App\Http\Middleware\UserMiddleware::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
AdminController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class AdminController extends Controller
{
public function users()
{
return view('admin.users');
}
public function articles()
{
return view('admin.articles');
}
}
But I am getting this error-
when "return Auth::user();" called inside middleware, "return Auth::user();" is working in other place (view and controllers) but not working like old versions of Laravel.
Can anyone please help?
Best Answer
You could potentially do something like this, adjust where needed
The error you are receiving is coming from the fact that you are not returning a
Response
object from your middleware. TheVerifyCsrfToken
middleware is trying to add a cookie to the response it gets from passing the request down the pipeline. In this case it is not getting aResponse
object but instead a string orUser
because a string orUser
was returned in your middleware.