理解 GraphQL 中的“上下文” - Ruby on Rails

1 ruby ruby-on-rails graphql

我正在阅读 GraphQL 突变部分,我不明白context这部分内容以及context[:current_user]返回内容

这是示例代码:

class Mutations::PromoteEmployee < Mutations::BaseMutation
  def ready?(**args)
    # Called with mutation args.
    # Use keyword args such as employee_id: or **args to collect them
    if !context[:current_user].admin?
      raise GraphQL::ExecutionError, "Only admins can run this mutation"
    else
      # Return true to continue the mutation:
      true
    end
  end

  # ...
end
Run Code Online (Sandbox Code Playgroud)

这是指南链接:https ://graphql-ruby.org/mutations/mutation_authorization.html

小智 7

您可以向 GraphQL 提供特定于应用程序的值作为 context:。这在很多地方都可用:

  • 解析函数
  • 架构#resolve_type 钩子
  • ID生成和获取

上下文的常见用途:包括当前用户或身份验证令牌。要提供 context: 值,请将哈希传递给 Schema#execute:

    # graphql_controller.rb

    context = {
      current_user: session[:current_user],
      current_organization: session[:current_organization],
    }

    MySchema.execute(query_string, context: context)

Run Code Online (Sandbox Code Playgroud)

然后,您可以在执行期间访问这些值:


    field :post, Post, null: true do
      argument :id, ID, required: true
    end

    def post(id:)
      context[:current_user] # => #<User id=123 ... >
      # ...
    end

Run Code Online (Sandbox Code Playgroud)

请注意,上下文不是您传递给它的哈希值。它是 的一个实例{{ "GraphQL::Query::Context" | api_doc }},但它将#[]#[]=和一些其他方法委托给您提供的哈希。