0

これは簡単なように思えますが、1時間グーグルした後、私はこれを理解できません.

Amazon S3 の「ポリシー ドキュメント」を JSON としてサーバーに投稿しています。JSONをそのままエンコードする必要がありますが、Railsは「params」に何かを追加しているため、エンコードする必要があるJSONが乱雑になっています。

ここに私が持っているものがあります:

class Api::Amazons3Controller < Api::BaseController

 def sign_policy
   policy_document = params.except(:action, :controller)
   encoded_policy_document = Base64.encode64(policy_document.to_json).gsub(/\n|\r/, '')
   signature = Base64.encode64(
     OpenSSL::HMAC.digest(
       OpenSSL::Digest::Digest.new('sha1'), 
       ENV['AWS_SECRET_ACCESS_KEY'], 
       policy_document)
   ).gsub(/\n/, '')

   response = { policy: policy_document, signature: signature }
   render json: response
 end
end

params.except(:action, :controller)でパラメーターを「クリーンアップ」しようとしていますが、policy_document.to_jsonは JSON の周りに「amazons3」(コントローラー名) というルート ノートを追加しますが、これは望ましくありません。 . リクエストから純粋なjsonをエンコードするだけです。

どんな助けでも大歓迎です!

4

3 に答える 3

0

以下を追加することで、このコントローラーのパラメーター ラッピングを無効にすることができました。

class Api::Amazons3Controller < Api::BaseController
 wrap_parameters format: []
于 2013-08-28T03:31:09.197 に答える
0
class Api::Amazons3Controller < Api::BaseController
    self.include_root_in_json = false
end
于 2013-08-28T02:37:11.613 に答える
0

次にこれを試してください

config/initializers/wrap_parameters.rb

if defined?(ActiveRecord)
  ActiveRecord::Base.include_root_in_json = false
end
于 2013-08-28T03:00:19.153 に答える