Chicago Boss CSRF和变量传递给模板文件

时间:2014-12-10 18:56:09

标签: erlang session-variables csrf-protection chicagoboss

我的简单应用程序存在两个问题。

我已经阅读了两次文档,但没有运气使用boss_csrf_filter并将变量传递给模板。

首先,我完成了在boss.config文件中使用CSRF过滤器的配置,如下所示:

{controller_filter_config, [boss_csrf_filter]},
{session_adapter, mock},
{session_key, "_myapp_session"},
{session_exp_time, 525600},
{session_cookie_http_only, false},
{session_cookie_secure, false},
{session_domain, ".myappdomain.com"},

然后,我在模板中添加变量(在src / view / world / hello.html下)

<div class="row">
<div class="12u">
<textarea name="message" id="message" placeholder="placeholder" required></textarea>
 {{ csrf_token }}
 </div>
 </div>

Everthing似乎很好,但没有任何隐藏的输入元素出现。我应该检查/配置其他任何东西吗?

第二个问题是我的应用程序将变量传递给模板。我的控制器类似于以下代码:

-module(myapp_world_controller, [Req]).
-compile(export_all).

hello('GET', []) ->
    {ok, [{world}]}.

postcontact('POST', []) ->
         {redirect, "/",[{contactformsend, "ok"}]}.

代码重定向没有任何价值。所以,以下代码不起作用(与我上面提到的模板文件相同):

{% if contactformsend %}

<script>

    alert("Hi there is!");

</script>

{% endif %}

我做错了什么?我该如何解决这些问题?

1 个答案:

答案 0 :(得分:2)

我建议将你的问题分成两部分,因为我只回答第二部分。在控制器中使用redirect时,不传递变量。在the docs中,您可以阅读:

{redirect, Location, Headers::proplist()}

所以第三个参数是标题列表,而不是传递给模板的变量。这是有道理的:变量将从控制器中获取,负责渲染"/"