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');
}
}
我做了一个没有用户前端的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');
}
}