未定义的方法`[]' nil:NilClass for Warden

时间:2014-08-05 11:20:14

标签: ruby-on-rails ruby warden

我有一个Helper模块如下。该模块使用warden。

module V0
  module Api
    # @private
    module Helpers
      def warden
        env['warden']
      end

      # Used to require an authenticated user for a particular action.
      def protected!
        warden.authenticate!
      end

      def current_user
        warden.user
      end

      def parse_json_body
        request.body.rewind
        request_body = current_user ? current_user.keychain_replace(request.body.read) : request.body.read
        @parsed_body = JSON.parse(request_body, symbolize_names: true)
        params.update @parsed_body
      end
    end
  end
end

模块解析请求。在行

request_body = current_user ? current_user.keychain_replace(request.body.read) : request.body.read

我尝试检查当前用户是否已设置并相应地获取request_body。但是我收到以下错误。

NoMethodError:
       undefined method `[]' for nil:NilClass
     # (eval):2:in `method_missing'
     # ./app/api/v0/helpers.rb:11:in `warden'
     # ./app/api/v0/helpers.rb:23:in `current_user'
     # ./app/api/v0/helpers.rb:37:in `parse_json_body'

如果没有设置当前用户,那么它应该设置

request_body = request.body.read

但我没有得到这个

2 个答案:

答案 0 :(得分:1)

而不是

request_body = current_user ? current_user.key ..

request_body = !current_user.nil? ? current_user.key ..

那会得到一个真/假的回应来评价..我把它!保持你的论点的顺序。

这是一个猜测,但我认为它正在评估一个零,而不是寻找虚假属性..

答案 1 :(得分:0)

问题似乎在于您的warden方法。那里的env变量为nil。检查模块是否正确加载。