私はそれがRailsに達する前にauthenticity_tokenパラメータを変更するいくつかのミドルウェアをやっています。ラックとrack.request.form_vars/rack.request.form_hash
env.inspectがrack.request.form_varsとrack.request.form_hashの両方を提供していることがわかります。どちらも真正性トークンを含んでいます。 Railsはどちらを使用しますか?
私はそれがRailsに達する前にauthenticity_tokenパラメータを変更するいくつかのミドルウェアをやっています。ラックとrack.request.form_vars/rack.request.form_hash
env.inspectがrack.request.form_varsとrack.request.form_hashの両方を提供していることがわかります。どちらも真正性トークンを含んでいます。 Railsはどちらを使用しますか?
ソースを見てみましょう!両方の変数は、Rack::Request
ヘルパークラスの使用に由来します。これは、要求パラメータへの素晴らしいインタフェースを提供します。 Rackアプリケーションはこれを使用する必要はありませんが、Railsはそれを使用します。
変数はRack::Request
の内部使用です。 rack.request.form_vars
には解析されていないPOST本体が含まれ、rack.request.form_hash
には解析されたハッシュが含まれます。 ActionDispatch::Request
はRack::Request
から継承し、後者の変数を読み取るパラメータRack::Request#POST
を使用してパラメータを取得します。自分でRack::Request
を使って修正することができます。
ソースを見て、ソースを理解することは2つの異なることです:)そのことを説明してくれてありがとう。 – iain
あなたがthis pull requestが含まラックの最新のコピーを持っている場合は
class YourMiddleware
def initialize(app)
@app = app
end
def call(env)
req = Rack::Request.new(env)
req.POST["authenticity_token"] = "foo"
end
end
、あなたが使用できる
Rack::Request#update_param
:
request = Rack::Request.new(env)
request.update_param :auth_token, 'XXXXXXXXXXXXXXXX'
上記
req.POST
ソリューションは、これはミドルウェア間で受け渡される
env
に持続しますと同じように
- それはあなたのような状況に対処するためのより高いレベルの呼び出しです。
これも知りたいです。あなたが何かを見つけたら教えてください。 – iain
'form_vars'と' form_hash'のためのレールソースツリーを通して検索すると、結果は得られません。私はあなたのように混乱しています。 –