我在Windows开发机器上使用Laravel 5。我想在整个应用程序中自定义和使用 Auth 中间件,以维护身份验证。 我的用例是标准用例。有两类(或三类)用户 - 管理员和常规(常规用户不是管理员)。
管理员具有明显的后端管理角色,因此有一个单独的路由组 / admin / ,它应该将未登录的用户重定向到 / admin / login 。我已经这样设置了..
Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() {
Route::get('login','App\AuthController@getLogin');
Route::post('login','App\AuthController@postLogin');
});
发布登录表单后,如何让Auth 添加过滤器
答案 0 :(得分:5)
我建议您定义另一个中间件来检测用户是否为admin而不是修改auth。现在将另一个中间件添加到只有管理员可以访问的路由中。
添加几个像这样的路由中间件
Route::group(['middleware' => ['auth','admin']], function() {
中间件看起来像
public function handle($request, Closure $next) {
if (Auth::user()->role == "admin") {
return $next($request);
} else {
return redirect("/")->withMyerror("You are not authorized for this action");
}
}
答案 1 :(得分:0)
为什么不代替处理Auth过滤器并尝试"验证"只有在某种情况下,在您的登录代码中,只需检查用户的类型是什么?
这是我的高级代码:
// get roles which are allowed to login to the admin panel
$roles = $this->userService->adminRoles();
$user = User::whereUsername(Input::get('username'))->whereIn('role_id', $roles)->first();
if (is_null($user)) {
// ...
}
// create our user data for the authentication
$userdata = array(
'username' => Input::get('username'),
'password' => Input::get('password'),
);
// attempt to do the login
// Auth::attempt($userdata) ....
这样,您只能在尝试登录时执行一次这样的操作吗?