Laravel 5.5 组中间件重定向您的次数过多
Laravel 5.5 group middleware redirected you too many times
我正在尝试为路由组编写一个中间件,以仅允许 is_admin
为 1
的用户,但是当我访问路由时,用户是 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);
我正在尝试为路由组编写一个中间件,以仅允许 is_admin
为 1
的用户,但是当我访问路由时,用户是 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);