我已经在 Controller 中使用 Route::Intended('/') 将标准身份验证过滤器添加到多个路由(假设登录成功)。
过滤器.php:
Route::filter('auth', function(){
if (Auth::guest()) return Redirect::guest('internal/login');
});
Controller :
if (Auth::attempt($data, false))
{
return Redirect::intended('/');
}
我如何着手创建自定义身份验证过滤器来检查特定权限(在本例中为 isAdmin)?
我已将 auth.admin 过滤器设置为与标准身份验证过滤器相同以重定向到登录页面,但我是否需要在我的 Controller 上使用第二个登录方法,或者是否有办法判断哪个过滤器(如果有)调用了 Controller 方法?
if (Auth::attempt($data, false))
{
if (RouteHasAdminFilter())
{
if (!Auth::User()->Admin)
return Redirect::intended('/');
else
return Redirect::to('/');
}
else
{
return Redirect::intended('/');
}
}
最佳答案
感谢@diegofelix让我走上正轨。
我已经设法编写了一个过滤器:
- 提示用户输入他们的凭据
- 非管理员用户重定向到主页
- 允许管理员用户转到原始 URL
Route::filter('admin', function()
{
if (Auth::guest()) return Redirect::guest('internal/login');
if (Auth::check())
{
if (!Auth::User()->Admin)
return Redirect::to('/');
}
else
return Redirect::to('/');
});
此过滤器不需要更改我的 Controller 上的登录方法,它仍然使用 Redirect::intended('/')。
这样做的关键是不为管理员用户重定向,只是让代码“掉落”到原始页面,只有非管理员用户被重定向。
我还在对需要非管理员身份验证的页面使用标准的“auth”过滤器。
我的路线使用:
'before' => 'auth'
'before' => 'admin'
如果我删除管理过滤器的第一行(我从标准 auth 过滤器复制而来),我可以通过同时使用两个过滤器来获得相同的效果,如下所示:
'before' => 'auth|admin'
关于php - Laravel 自定义身份验证过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21598991/