我有一个csrf令牌转储到窗口上的JS变量中。我有一个表单从控制器发出AJAX请求(没有Ember数据)。在我的请求中,我需要传递csrf令牌。将此令牌放入Ember的推荐位置在哪里?现在我正在窗外抓住它,但我意识到这对可测试性有害。我的第一个想法是将它注册到容器中。我对Ember很新,所以任何反馈都会非常感激!
答案 0 :(得分:5)
就像@ Kingpin2k所说的那样,它确实不需要注入到ember应用程序中。如果你正在进行ajax调用,你可以使用jquery来完成它。一个简单的方法是,
ajaxSetup
)。像这样。
<meta name="csrf-token" content="{{ csrf_token() }}">
<script type="text/javascript">
// Add x-csrf-token to all ajax request
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
</script>
答案 1 :(得分:0)
根据您是将Ember-cli与模块一起使用还是仅使用全局命名空间,我有不同的偏好。
如果它是全局命名空间,我宁愿把它放在全局命名空间的根目录中。
如果是cli,我经常会有会话服务,我只是从那里的窗口拉出来,或者在测试环境下,允许它来自另一个位置,例如csrf = Testing.csrf || window.csrf
或类似的东西。
此外,在某些情况下,它确实不需要注入ember应用程序。您可以将其挂钩到jquery以执行所有ajax请求,然后不必考虑它与ember本身有关,因为它实际上与ember无关,它与jquery中使用的通信保护更相关服务器