Laravel 5.5 组中间件重定向您的次数过多

Laravel 5.5 group middleware redirected you too many times

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

This page isn’t working

localhost redirected you too many times.

这是我的中间件:

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

  return redirect('/contacts');
}

我在 $middlewareGroups 中创建了一个 'cms' 密钥,位于 Kernel.php:

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

并将其分配到我的路由组:

Route::group(['middleware' => 'cms'], function() {
  Route::get('/cms', 'CmsController@index')->name('cms');
});

访问/contacts没问题,但是访问/cms会出现上面的错误。

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

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

  return redirect('/contacts');
}

发生的事情是这样的: 您的路线会将您定向到中间件。在发现用户确实是管理员后,您使用重定向。由于此重定向是通过 url,它将使用路由,而路由又使用了中间件。 实际上,您已经创建了一个无限循环。 我假设你想做的是简单地继续检查后路由指向的内容,如下所示:

return $next($request);