php - 使用保护的经过身份验证的用户出错并且可以访问某些模型
问题描述
我正在使用 lighthouse-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"
有人尝试过这个麻烦吗?谢谢。
解决方案
我解决了。
我们必须使用以下内容设置 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,
],
],
推荐阅读
- vue.js - 方法中的await axios请求未及时完成
- groovy - 通过 Moqui 中的 groovy 连接到 gremlin 服务器
- python - 如何暂停一个函数,并在没有线程的情况下恢复它
- javascript - 我想从闭包外部更改变量“inner”的值,但我的输出似乎未定义
- oop - 定义通用 TObjectList
该类型 T 是在运行时确定的 - android - 如何从另一个活动刷新当前列表视图?
- c# - unity 防止点击 1s
- javascript - 如何从 TypeScript 中的另一个模块引用现有类型?
- c# - 数据库集
.Where() 总是返回 null EFCore2.2 - mysql - 包含日期字段的实体的保存或更新操作休眠减去一天