【问题标题】:Laravel 5.5 group middleware redirected you too many timesLaravel 5.5 组中间件重定向你太多次
【发布时间】:2018-05-04 15:24:42
【问题描述】:

我正在尝试为路由组编写一个中间件,以仅允许 is_admin 为 1 的用户,但是当我使用一个用户和管理员访问该路由时,会显示错误消息:

此页面无法正常工作

localhost 重定向您的次数过多。

这是我的中间件:

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

  return redirect('/contacts');
}

我在位于Kernel.php 的$middlewareGroups 中创建了一个“cms”键:

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

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

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

访问/contacts 工作正常,但访问/cms 会导致上述错误。

【问题讨论】:

  • 你是说.. 如果 /cms 然后重定向到 /cms,它会重新运行中间件,该中间件将重定向到 /cms 等

标签: php laravel-5.5 laravel-middleware


【解决方案1】:

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

return $next($request);

【讨论】:

  • 您的解决方案帮助了我。谢谢。
  • 谢谢你救了我。简单地说一下你所说的:The route which your middleware is redirecting to upon failure of some condition. That Route should be excluded from the middleware.
【解决方案2】:

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

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

  return redirect('/contacts');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多