Ruby on rails 带有graphql的“nil:NilClass的未定义方法”[]=”

Ruby on rails 带有graphql的“nil:NilClass的未定义方法”[]=”,ruby-on-rails,graph,Ruby On Rails,Graph,我在尝试通过graphiql登录时遇到了这个问题,控制台中出现的错误在以下行中: 突变/符号在用户中。rb:27:in'resolve' 上下文[:会话][:令牌]=令牌 登录服务的配置如下所示: module Mutations class SignInUser < BaseMutation null true argument :credentials, Types::AuthProviderCredentialsInput,

我在尝试通过graphiql登录时遇到了这个问题,控制台中出现的错误在以下行中:

突变/符号在用户中。rb:27:in'resolve' 上下文[:会话][:令牌]=令牌

登录服务的配置如下所示:

    module Mutations
        class SignInUser < BaseMutation
        null true

        argument :credentials, Types::AuthProviderCredentialsInput, required: false

        field :token, String, null: true
        field :user, Types::UserType, null: true

        def resolve(credentials: nil)
            # basic validation
            return unless credentials

            user = User.find_by email: credentials[:email]
            puts '---userrr------- ' + user.email.to_s
            return Errors unless user

            # ensures we have the correct user
            return unless user
            return unless user.authenticate(credentials[:password])

            # use Ruby on Rails - ActiveSupport::MessageEncryptor, to build a token
            crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base.byteslice(0..31))
            token = crypt.encrypt_and_sign("user-id:#{ user.id }")
            puts '---------------- ' + token

            context[:session][:token] = token

            { user: user, token: token }
        end
        end
    end

当我第一次在rails 5.1.7上运行应用程序,但现在在6.0上运行应用程序时,我想知道我现在使用的新版本是否会影响此配置。

您在哪里定义了上下文关键字?请尝试定义它。

:D,感谢大家的帮助!我的错误是我没有在controller/graphql->中定义上下文,所以在文件中我只是添加了这一行来定义上下文对象

  def execute
    variables = ensure_hash(params[:variables])
    query = params[:query]
    operation_name = params[:operationName]
    context = {
      # we need to provide session and current user
      session: session,
      current_user: current_user
    }
    result = AppOneSchema.execute(query, variables: variables, context: context, operation_name: operation_name)
    render json: result
  rescue => e
    raise e unless Rails.env.development?
    handle_error_in_development e
  end

如何/在何处创建上下文[:会话]?因为您可以尝试使用上下文[:sesion_token],它也应该可以工作。请多多关注graphql如何处理上下文谢谢!我忘了在控制器内配置上下文!:D