我正在尝试为路由组编写一个中间件,只允许is_admin
为1
的用户,但是当我访问路由时,用户是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
会导致上述错误。
答案 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');
}