Php 途中不止一名警卫

Php 途中不止一名警卫,php,laravel,laravel-5.2,laravel-routing,Php,Laravel,Laravel 5.2,Laravel Routing,我使用laravel框架,我想在我的路线中使用多个守卫,如: Route::group([ 'middleware' => 'jwt.auth', 'guard' => ['biker','customer','operator']], function () {} 我在AuthServiceProvider.php中有一个脚本,如下所示: $this->app['router']->matched(function (\Illuminate\Routing\

我使用laravel框架,我想在我的路线中使用多个守卫,如:

   Route::group([ 'middleware' => 'jwt.auth', 'guard' => ['biker','customer','operator']], function () {}
我在
AuthServiceProvider.php
中有一个脚本,如下所示:

  $this->app['router']->matched(function (\Illuminate\Routing\Events\RouteMatched $event) {
        $route = $event->route;
        if (!array_has($route->getAction(), 'guard')) {
            return;
        }
        $routeGuard = array_get($route->getAction(), 'guard');
        $this->app['auth']->resolveUsersUsing(function ($guard = null) use ($routeGuard) {
            return $this->app['auth']->guard($routeGuard)->user();
        });
        $this->app['auth']->setDefaultDriver($routeGuard);
    });
在路线上只有一个守卫,比如
“守卫”=>“摩托车手”


因此,如何更改AuthServiceProvider.php中的代码以与route中的多个gaurd一起工作

我知道这是一个古老的问题,但我刚刚讨论了这个问题,并找到了自己的解决方法。这可能对其他人有用。解决方案非常简单,只需在中间件名称后指定每个防护,中间用逗号分隔,如下所示:

Route::group(['middleware' => ['auth:biker,customer,operator'], function() {
    // ...
});
然后将保护发送到
\illumb\Auth\Middleware\Authenticate
函数
验证(数组$guards)
,该函数检查数组中提供的每个保护

这适用于Laravel 5.4。
同样适用于Laravel 6.0。

我认为Laravel不允许在一条路线上有多个警卫。您可能需要基于此重新考虑您的策略(即单保护并通过中间件实现此功能),因为我的
auth.php
中有3个保护,并且laravel无法将多保护设置为默认值,当我使用jwt运行api来解析该令牌以了解请求的用户类型时,会显示
未找到的用户,因为is 3是面向用户的模型,我不知道如何处理多个模型的用户问题是,你所做的不是标准的事情,所以Laravel无法立即处理,这就是为什么我建议你改用标准的方式,即单用户模型,通过中间件进行单一保护和不同用户类型的检查。否则,您基本上必须重写自己的自定义身份验证驱动程序和保护程序。