Laravel 隔离管理员登录

Laravel isolate admin login

我做了一个没有用户前端的CMS。只有管​​理面板处于活动状态,我想限制任何非管理员登录。

我在User模型中做了一个isAdmin()方法:

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

我发现 RedirectIfAuthenticated 给我带来了问题,因为它正在重定向到主页(也受中间件保护),然后中间件将它重定向到登录,但它永远不会退出的路线,所以我的解决方案是注销用户以中断启动的会话:

public function handle($request, Closure $next)
    {
        if(Auth::user()->isAdmin()){
            return $next($request);
        }else{
            Auth::logout();
            return redirect('login');
        }
    }