Я только что включил промежуточное ПО защиты CSRF в Yesod.
Мои вызовы jQuery AJAX работают, с токеном CSRF, добавляемым в заголовок в соответствии с обычным скаффолдом.
Теперь у меня есть нормальная HTML форма "POST", не сгенерированная Yesod . Я хочу включить токен защиты CSRF в качестве скрытого ввода.
Пока у меня это есть в моем ExampleHandler.hs
mcsrftoken <- fmap reqToken getRequest
let csrftoken = case mcsrftoken of
Nothing -> "NO_TOKEN"
Just t -> t
(Спасибо Snoymaster на Yesod 1.2 CSRF защита )
И в example.hamlet
:
<form method="post" action="@{ExampleR someId}">
<input name="_token" type="text" value=#{csrftoken}>
Эта форма работает.
У меня много обработчиков, поэтому я не хочу вставлять код (или функцию) в каждый из них, чтобы получить токен. Я также не хочу конвертировать все мои HTML формы в AJAX.
Я попытался вставить указанный выше фрагмент извлечения токена в Foundation.hs
, чтобы получить токен повсюду, но затем я получил:
Variable not in scope: csrftoken
На строке в обработчике, где example.hamlet
выдвинут.
Как я могу получить переменную csrftoken
в области видимости во всех обработчиках?
Есть ли лучший способ получить токен CSRF в не сгенерированный HTML формы?
Спасибо, haskellers и поклонников Yesod