经过身份验证的用户使用 guard 时出错,并且可以访问某些模型

我正在使用灯塔-php来制作一个 graphql api,并且我在更改中间件(它将在新版本中被弃用)指令时遇到了麻烦。


extend type Query @middleware(checks: ["auth:api"]) {

    task(id: ID @eq): Task @can(ability: "view" find:"id") @find

    mytasks: [Task!]!

}

使用此代码效果很好。我的意思是,系统会检查用户是否已记录,并根据策略检查用户是否可以访问其任务,但是当我尝试将指令更改为如下所示的指令时:@middleware@guard


extend type Query @guard(with: ["api"]){

    task(id: ID @eq): Task @can(ability: "view" find:"id") @find

    mytasks: [Task!]!

}

始终返回用户未经身份验证。但是,在最后一种情况下,如果我删除@can指令,系统将检查用户是否已记录(但我需要根据策略检查用户是否可以访问指定的任务)。


我正在使用这些版本的软件包:


"joselfonseca/lighthouse-graphql-passport-auth": "^3.0",

    "laravel/framework": "^6.2",

    "laravel/passport": "^8.2",

    "laravel/tinker": "^2.0",

    "mll-lab/laravel-graphql-playground": "^2.0",

    "nuwave/lighthouse": "^4.8"

有人尝试过这种麻烦吗?谢谢。


杨魅力
浏览 102回答 2
2回答

月关宝盒

我解决了它。我们必须使用以下命令设置配置/身份验证.php文件:/*|--------------------------------------------------------------------------| Authentication Defaults|--------------------------------------------------------------------------|| This option controls the default authentication "guard" and password| reset options for your application. You may change these defaults| as required, but they're a perfect start for most applications.|*/'defaults' => [    'guard' => 'api',    'passwords' => 'users',],/*|--------------------------------------------------------------------------| Authentication Guards|--------------------------------------------------------------------------|| Next, you may define every authentication guard for your application.| Of course, a great default configuration has been defined for you| here which uses session storage and the Eloquent user provider.|| All authentication drivers have a user provider. This defines how the| users are actually retrieved out of your database or other storage| mechanisms used by this application to persist your user's data.|| Supported: "session", "token"|*/'guards' => [    'web' => [        'driver' => 'session',        'provider' => 'users',    ],    'api' => [        'driver' => 'passport',        'provider' => 'users',        'hash' => false,    ],],

泛舟湖上清波郎朗

与此同时,我发现了文档中提到的另一种解决方案:https://lighthouse-php.com/master/security/authentication.html#global简而言之,我需要将尝试身份验证中间件添加到灯塔配置中。我使用这个@auth(警卫:“api”)添加到我的所有类型。
打开App,查看更多内容
随时随地看视频慕课网APP