我应该在哪里把我的CSRF令牌放在我的Ember应用程序中?

时间:2015-05-10 00:34:39

标签: javascript ember.js

我有一个csrf令牌转储到窗口上的JS变量中。我有一个表单从控制器发出AJAX请求(没有Ember数据)。在我的请求中,我需要传递csrf令牌。将此令牌放入Ember的推荐位置在哪里?现在我正在窗外抓住它,但我意识到这对可测试性有害。我的第一个想法是将它注册到容器中。我对Ember很新,所以任何反馈都会非常感激!

2 个答案:

答案 0 :(得分:5)

就像@ Kingpin2k所说的那样,它确实不需要注入到ember应用程序中。如果你正在进行ajax调用,你可以使用jquery来完成它。一个简单的方法是,

  1. 在元标记内容中声明服务器端的csrf。
  2. 通过名称从元标记中获取它。
  3. 使用jquery(例如,作为 Header )(如果你想将它与每个ajax请求一起使用,你可以使用ajaxSetup)。
  4. 像这样。

    <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中使用的通信保护更相关服务器