"undefined method` [] = 'for nil: NilClass "с помощью graphql - PullRequest
0 голосов
/ 27 мая 2020

У меня возникает эта проблема, когда я пытаюсь войти через graphiql, ошибка, которая появляется в консоли, находится в строке, где:

mutations / sign_in_user.rb: 27: in `resolve '" context [: session] [: token] = token

конфигурация для службы входа следующая:

    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, мне было интересно, может ли новая версия, которую я использую сейчас, повлиять на эту конфигурацию.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

где вы определили ключевое слово context, попробуйте его определить.

0 голосов
/ 28 мая 2020

: 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...