Ruby on rails 带有graphql的“nil:NilClass的未定义方法”[]=”
我在尝试通过graphiql登录时遇到了这个问题,控制台中出现的错误在以下行中: 突变/符号在用户中。rb:27:in'resolve' 上下文[:会话][:令牌]=令牌 登录服务的配置如下所示: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,
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