Laravel隔离管理员登录

时间:2016-04-26 12:16:30

标签: laravel authentication admin

我已经制作了一个没有用户前端的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

1 个答案:

答案 0 :(得分:0)

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

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