2

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 ファンに感謝します

4

0 に答える 0