首页 > 解决方案 > 在 GraphQL 中使用非默认模式

问题描述

我正在为移动应用后端构建 GraphQL API。我正在使用rebing/graphql-laravel在 Laravel 之上构建它,但我遇到了一些麻烦。

大多数查询和突变都需要用户登录,因此他们使用身份验证中间件来限制访问(尽管在某些时候我计划用 JWT 替换它,这将在生产中使用)。但是,未登录的用户应该可以访问两种突变 - 一种通过登录详细信息并获取 JWT,另一种用于注册用户并获取 JWT。

我能找到的唯一方法是将这些突变移动到单独的auth模式中。但是,尽管扎根于文档中,但我终生无法找到如何指定默认模式以外的模式。

创建用户的突变如下所示:

mutation {
  createUser (
    email: "jeff@example.co.uk",
    name: "Jeff",
    password: "password"
  ) {
    token
  }
}

如果我将突变移动到默认模式,它会起作用,但这当然对我的用例没有用。

我需要如何调整它以使用auth模式而不是default模式?听起来应该很简单,但我一生都无法通过谷歌找到它。

标签: laravelgraphqlgraphiql

解决方案


事实证明这简单,只是似乎很难追踪。

GraphQL 端点和 GraphiQL 接口的 URL 具有架构名称字段的可选参数,如php artisan routes:list. 这包括以下路线:

  • graphql/{default}
  • graphql/{auth}
  • graphiql/{default}
  • graphiql/{auth}

如果您导航到graphiql/auth浏览器中的 ,则可以使用注册到auth那里的架构的查询和突变。同样,您可以graphql/auth照常查询。在这两种情况下,您都将为auth应用的架构设置中间件。

如果您不指定第二个 URL 参数,那么您将使用default架构。


推荐阅读