我正在尝试为我的Laravel 5.2应用程序中的不同类型的用户制作中间件.
所以,我正在做的是为不同的用户制作不同的中间件.
所以,我正在做的是为不同的用户制作不同的中间件.
据我所知,Auth :: check()如果没有从here开始调试中间件网络将无法工作.
所以,我所做的是 –
Route::group(['middleware' => ['web','admin']],function () { //suspend,activate,delete Route::get('users',[ 'uses' => 'AdminController@users','as' => 'users' ]); //Edit,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'); } }
但我得到这个错误 –
当“返回Auth :: user();”时称为中间件,“返回Auth :: user();”正在其他地方工作(视图和控制器),但不像老版本的Laravel一样工作.
有人可以帮忙吗?
解决方法
您可以做这样的事情,根据需要进行调整
public function handle($request,Closure $next) { $user = $request->user(); if (! $user || $user->user_type != 'admin') { return redirect('login'); } return $next($request); }
您收到的错误来自于您没有从中间件返回Response对象这一事实. VerifyCsrfToken中间件正在尝试将cookie添加到通过管道传递请求所获得的响应中.在这种情况下,它不是获取Response对象而是获取字符串或User,因为在中间件中返回了字符串或User.