我已经制作了一个没有用户前端的CMS。只有管理面板处于活动状态,我想限制非管理员的任何人登录。
我在isAdmin()
模型中制作了User
方法:
public function isAdmin()
{
if ($this->roles->first()->name == 'Administrator') {
return true;
}else return false;
}
哪种方法正常(我已经测试了反馈)。
Route::auth();
以外的所有内容都受中间件保护:
Route::group(['middleware' => ['auth', 'admin']], function () {
...
});
我已注册' admin'内核中的中间件,它的句柄方法是:
public function handle($request, Closure $next)
{
if(Auth::user()->isAdmin()){
return redirect('user');
}else return redirect('login');
}
但我遇到的问题是我得到ERR_TOO_MANY_REDIRECTS
,并且有些东西不能正常工作?有谁知道为什么?
修改
逻辑表明,当触发中间件时,每个请求都将重定向到用户,因此我将其更改为:
public function handle($request, Closure $next)
{
if(Auth::user()->isAdmin()){
return $next($request);
}else return redirect('login');
}
适用于管理员用户,但对于其他用户,他们无法重定向,但我再次获得ERR_TOO_MANY_REDIRECTS
答案 0 :(得分:0)
我已经发现RedirectIfAuthenticated
给我带来了问题,因为它正在重定向到家(也受中间件保护),然后中间件将其重定向到登录,它永远不会出来路由,所以我的解决方案是注销用户以打破已启动的会话:
public function handle($request, Closure $next)
{
if(Auth::user()->isAdmin()){
return $next($request);
}else{
Auth::logout();
return redirect('login');
}
}