laravel - Laravel Lighthouse Graphql 多个守卫
问题描述
我正在尝试使我的自定义防护与 Lighthouse 对抗 GraphQL 模式,但它不起作用。
问题是 graphql 查询没有达到我的自定义保护。
schema.graphql:(为简洁起见删除了一些代码)
extend type Query @guard(with: ["api", "partner"])
{
GetHighscores(): [Highscore!]!
}
注意@guard
指令,它有api
和partner
。我希望他们按那个顺序运行(顺便说一句,它有顺序吗?)。
现在定义partner
守卫 AuthServiceProvider@boot
Config::set('auth.guards.partner', [
'driver' => 'partner',
]);
Auth::viaRequest('partner', function (Request $request) {
dd('MUST GET HERE');
});
当我使用经过身份验证的承载令牌运行查询时,partner
不执行保护。但是,如果我在此partner
之前设置了警卫,api
它就会被执行。我在这里想念什么?
编辑
使用 CURL,我请求了一个受保护的 laravel 路由,它可以工作:
Route::middleware(['auth:api', 'auth:partner'])->get('/partners', function (Request $request) {
print_r($request->user()->toArray());
});
它打印了dd()
消息,这是正确的。
那么为什么灯塔无法联系到我的海关警卫呢?
解决方案
lighthouse @guard 指令的行为类似于 OR 指令。如果第一个守卫通过,则永远不会检查第二个守卫。
您可以添加两次 @guard 指令。我认为这应该有效。
extend type Query @guard(with: ["api"]) @guard(with: ["partner"])
{
GetHighscores(): [Highscore!]!
}
这是指令中的代码:
/**
* Determine if the user is logged in to any of the given guards.
*
* @param array<string> $guards
*
* @throws \Illuminate\Auth\AuthenticationException
*/
protected function authenticate(array $guards): void
{
foreach ($guards as $guard) {
if ($this->auth->guard($guard)->check()) {
$this->auth->shouldUse($guard);
return;
}
}
$this->unauthenticated($guards);
}
推荐阅读
- kubernetes - 在 Kubernetes 中从容器写入主机
- php - Replacing array_key_exists() with isset() in PHP
- node.js - 正则表达式在 mongodb 命令行中工作,但不适用于 mongoose
- angularjs - 量角器在父元素中查找元素
- android - 如何在 android ListView 的分页滚动中滚动到最后一页正常工作
- powerbi - Power Query to load Web data but no table shows
- amazon-web-services - Amazon EC2 上的 thingsboard 不显示数据
- r - 具有方差结构的 R lmer
- jquery - jQuery Onclick 功能不起作用
- powershell - 只选择两位小数而不四舍五入