【问题标题】:How to use laravel Multiple Auth Guard for same controller如何为同一个控制器使用 laravel Multiple Auth Guard
【发布时间】:2018-03-29 23:34:06
【问题描述】:

laravel 5.2

我有下面给出的多个 auth Gard

行政 客户 员工

我有

ItemController ->index.blade.php ->create.blade.php ->edit.blade.php ItemKitController ->index.blade.php ->create.blade.php ->edit.blade.php

我想使用 Client 和 Employee Guard 来访问同一个 Controller 并查看上面提到的内容。

是他们任何可能的方式。

【问题讨论】:

  • 我认为您正在尝试使用警卫来实施策略。您的用例应使用策略。
  • 不,我没有执行政策
  • 守卫用于身份验证,而策略用于授权。换句话说,您使用警卫将 JWT 用于 API,将普通身份验证用于 Web。但是,根据您的示例,对于不同的访问权限,这是授权,可以通过策略来完成。
  • 是的,但我已经为身份验证实施了不同的保护策略是用于自动化
  • 我想要同一控制器的多重身份验证保护

标签: php laravel laravel-5.2


【解决方案1】:

也许你想要这样的东西

public function __construct()
    {
        $this->middleware('auth:Admin,Clients,Employee');
    }

在你的控制器中

【讨论】:

    【解决方案2】:

    您可以使用如下中间件:

    Route::group([ 'middleware' => ['Admin', 'Clients', 'Employee'] ], function(){
      Route::get('/Admin', 'AdminController@index');
      Route::get('/Clients', 'ClientsController@index');
      Route::get('/Employee', 'EmployeeController@index');
    
    });
    

    例如,我有一个管理中间件,用于检查用户 ID 是否为 1

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Auth;
    use Log;
    
    class AuthAdmin
    {
        private $admins; // Admin ids
    
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            $this->admins = config('custom.admins'); // get configs
            $user = Auth::user();
    
            if($user->id != 1)){
                // not admin, redirect home
                return redirect('/');
            }
    
          // is admin, let request continue
          return $next($request);
        }
    }
    

    那你得把它添加到Kernel.php "$routeMiddleware":

    protected $routeMiddleware = [
            'auth' => \App\Http\Middleware\Authenticate::class,
            'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
            'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
            'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
            'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    
            // Custom Middleware
            // Auth Admin
            'auth_admin' => \App\Http\Middleware\AuthAdmin::class,
        ];
    

    然后在我的路线中:

    Route::group([ 'middleware' => ['auth_admin'] ], function(){
    
        // nobody can come to these routes but admins
        Route::get('/admin/index', 'AdminController@index');
    });
    

    【讨论】:

    • 我想为同一个控制器使用不同的身份验证保护 ("auth:client", "auth:employee")
    猜你喜欢
    • 2020-08-03
    • 2016-07-30
    • 2017-09-12
    • 2016-09-07
    • 2014-01-09
    • 1970-01-01
    • 2020-10-09
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多