Yesod で CSRF 保護ミドルウェアを有効にしました。
私のjQuery AJAX呼び出しは機能しており、通常の足場に従ってCSRFトークンがヘッダーに追加されています。
これで、 Yesod によって生成されたものではない、通常の HTML "POST" フォームができました。CSRF 保護トークンを非表示の入力として含めたい。
これまでのところ、私はこれを持っていますExampleHandler.hs
mcsrftoken <- fmap reqToken getRequest
let csrftoken = case mcsrftoken of
Nothing -> "NO_TOKEN"
Just t -> t
( Yesod 1.2 CSRF 保護の Snoymaster に感謝します)
そしてでexample.hamlet
:
<form method="post" action="@{ExampleR someId}">
<input name="_token" type="text" value=#{csrftoken}>
この1つのフォームが機能します。
ハンドラーがたくさんあるので、トークンを取得するために、すべてのハンドラーにコード (または関数) を貼り付けたくありません。また、すべての HTML フォームを AJAX に変換したくありません。
上記のトークン取得スニペットを に貼り付けて、Foundation.hs
どこでもトークンを取得しようとしましたが、次のようになります。
Variable not in scope: csrftoken
example.hamlet
が引き込まれるハンドラーの行。
csrftoken
すべてのハンドラーでスコープ内の変数を取得するにはどうすればよいですか?
生成されていない HTML フォームに CSRF トークンを取得するより良い方法はありますか?
Haskeller と Yesod ファンに感謝します