【发布时间】:2017-01-15 03:00:05
【问题描述】:
我使用 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);
});
只有一名守卫在路线上工作,例如'guard'=>'biker'
那么如何更改 AuthServiceProvider.php 中的代码以在路由中使用多个 gaurd
【问题讨论】:
-
我不认为 Laravel 允许在一条路线上有多个守卫。您可能需要基于此重新考虑您的策略(即单一保护并通过中间件实现此功能)
-
因为我的
auth.php中有 3 个保护,而 laravel 无法将多保护设置为默认值,并且当我使用 jwt 运行 api 来解析该令牌以了解请求的用户类型时,我会看到 @ 987654326@,因为是3个模型的用户,我不知道如何处理多个模型的用户 -
问题是你正在做的不是标准的事情,所以 Laravel 不能开箱即用地处理它,这就是为什么我建议你切换到标准的做事方式事物,即单用户模型、单警卫和通过中间件进行的不同用户类型检查。否则,您基本上必须重写您自己的自定义身份验证驱动程序和守卫。
标签: php laravel laravel-5.2 laravel-routing