Laravel 5.5组中间件重定向了你太多次了

时间:2017-11-21 08:29:09

标签: php laravel-5.5 laravel-middleware

我正在尝试为路由组编写一个中间件,只允许is_admin1的用户,但是当我访问路由时,用户是admin和admin,错误消息出现:

  

此页面无效

     

localhost重定向了你太多次了。

这是我的中间件:

public function handle($request, Closure $next)
{
  if ($request->user()->is_admin === 1) {
    return redirect('/cms');
  }

  return redirect('/contacts');
}

我在位于$middlewareGroups的{​​{1}}中创建了一个'cms'键:

Kernel.php

并将其分配给我的路线组:

'cms' => [
    \App\Http\Middleware\AdminMiddleware::class,
]

访问Route::group(['middleware' => 'cms'], function() { Route::get('/cms', 'CmsController@index')->name('cms'); }); 工作正常,但访问/contacts会导致上述错误。

2 个答案:

答案 0 :(得分:3)

这是怎么回事: 您的路由会将您引导至中间件。在发现用户确实是管理员后,您使用重定向。由于此重定向是通过URL,它将使用该路由,该路由再次使用中间件。 实际上,您创建了一个无限循环。 我想你想要做的就是在检查后继续查看路线指向的内容,如下所示:

return $next($request);

答案 1 :(得分:0)

似乎你想检查用户是否是管理员,如果是,请允许他们使用路由'cms'。在这种情况下,您不应该使用重定向,而只是返回true。

public function handle($request, Closure $next)
{
  if ($request->user()->is_admin === 1) {
    return true;
  }

  return redirect('/contacts');
}