Php Laravel Auth仅验证管理员/超级用户

Php Laravel Auth仅验证管理员/超级用户,php,laravel,authorization,laravel-5,Php,Laravel,Authorization,Laravel 5,我正在Windows开发机器上使用Laravel 5。我想在整个应用程序中自定义并使用Auth中间件来维护身份验证。 我的用例是标准用例。有两(或三)类用户-Admin和Regular(Regular将是所有非Admin的用户) 管理员具有明显的后端管理角色,因此有一个单独的路由组/Admin/,它应该将未标记的用户重定向到/Admin/login。我是这样安排的 Route::group(['middleware'=>'auth', 'prefix' => 'admin'], fu

我正在Windows开发机器上使用Laravel 5。我想在整个应用程序中自定义并使用Auth中间件来维护身份验证。 我的用例是标准用例。有两(或三)类用户-AdminRegular(Regular将是所有非Admin的用户)

管理员具有明显的后端管理角色,因此有一个单独的路由组/Admin/,它应该将未标记的用户重定向到/Admin/login。我是这样安排的

Route::group(['middleware'=>'auth', 'prefix' => 'admin'], function() {
  Route::get('login','App\AuthController@getLogin');
  Route::post('login','App\AuthController@postLogin');
});
发布登录表单时,如何要求Auth添加筛选器

  • 是否只有从那些“is_admin”为真的用户中验证
  • 或者要求it部门首先加入一个用户和一个UserRoles表,以便仅识别具有管理员角色的用户

我建议您定义另一个中间件来检测用户是否是管理员,而不是修改身份验证。现在,将这另一个中间件添加到只有管理员才能访问的路由中

像这样向路由添加几个中间件

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");
  }
}

为什么不在您的登录代码中,只检查用户的类型,而不是处理身份验证过滤器并尝试仅在特定条件下“验证”呢

这是我的高级代码:

        // 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) ....

这样,您在尝试登录时只需执行一次即可?

谢谢,您的解决方案确实很实用。。在此之前,我也从Auth注销,以严格禁止普通用户尝试。如果应用了Auth中间件,如何能够看到登录页面?如果我的回答对您有所帮助,那么如果您也将其标记为acceped,那就太好了。非常感谢。