是否有可能 运行 所有 query/mutation 的中间件,除了任何一个?

Is it possible run a middleware for all query/mutation except any one?

我想为 GraphQL 中的所有 mutation/query 调用调用一个 http 中间件,但不想为一个查询调用?这可能吗?

编辑: 如果用户被软删除,我想为所有需要用户登录的 api 发送用户停用响应。但我不希望 api 再次成为 restore 用户。

不,这是不可能的。我不会在 Lighthouse 添加这样的功能。

如果您需要基于使用哪些 GraphQL 字段的特定逻辑,那属于字段中间件。 HTTP 和 GraphQL 是两个独立的层,不能混为一谈。

不,这在 Lighthouse 中是不可能的。

我建议使用 @guard 指令解决这个问题。 https://lighthouse-php.com/5/security/authentication.html#attemptauthentication-middleware

所以基本上做类似

的事情
extend type Query {
    restore(email: String!, password: String!): User
}

然后对于所有其他查询

extend type Query @guard {
    viewer: User! @auth
}

默认情况下,如果用户被软删除,则 auth:api 将不允许其登录,因此没有理由对防护进行任何更改。