Php 通过身份验证的用户使用guard和can访问某些模型时出错
我正在使用lighthouse php制作一个GraphQLAPI,但在更改中间件(在新版本中它将被弃用)指令以保护时遇到了问题Php 通过身份验证的用户使用guard和can访问某些模型时出错,php,laravel,graphql,laravel-lighthouse,Php,Laravel,Graphql,Laravel Lighthouse,我正在使用lighthouse php制作一个GraphQLAPI,但在更改中间件(在新版本中它将被弃用)指令以保护时遇到了问题 extend type Query @middleware(checks: ["auth:api"]) { task(id: ID @eq): Task @can(ability: "view" find:"id") @find mytasks: [Task!]! } 使用此代码效果很好。我的意思是,系统检查用户是否已登录,并根据策略检查用户是否可以
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"
有人试过这种麻烦吗?
谢谢。我解决了
我们必须使用以下内容设置config/auth.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,
],
],
同时,我发现了文档中提到的另一个解决方案:
因此,简而言之,我需要将AttemptAuthentication中间件添加到lighthouse配置中。我将@auth(guard:“api”)添加到我的所有类型中使用它。您找到过解决方案吗?我遇到了完全相同的问题。是的,我遇到了。我只是为其他人写了解决方案。希望这对你有帮助。