将CSRF令牌嵌入到Ember CLI应用程序中

时间:2015-09-11 12:02:58

标签: ember-cli csrf

我正在设计我的新Ember CLI应用程序。我将使用Ember Simple Auth进行授权。我还需要使用CSRF保护。我知道如何将令牌注入请求。问题是如何以正确的方式将令牌嵌入到应用程序中。

需要在后端生成令牌并将其嵌入到页面中。它应该与API用于验证请求的那个相同。

在我的情况下,API和Ember应用程序将由同一个Web服务器提供服务(很可能是Microsoft IIS,因为API是使用.NET MVC构建的)。因此,一旦索引文件请求,Web服务器就应生成令牌并以某种方式将其嵌入到Ember应用程序中。

但Ember CLI在构建过程中会生成静态index.html文件。我只看到两种嵌入令牌的方法。

第一个是在每个请求上解析Ember的index.html文件,并将CSRF令牌元标记嵌入到适当的位置。我真的不喜欢这样。

第二个是在构建过程中使Ember CLI生成index.aspx而不是index.html。在这种情况下,Web服务器会自动放置令牌。我更喜欢这种方式,但我不确定它是否可行。如果它是如何做到这一点?

也许,还有另一种更好的方法吗?任何帮助和建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

可以实现你的第二个想法。您需要在options.outputPaths.app.html中指定EmberApp的{​​{1}}属性:

ember-cli-build.js

执行此操作将导致Ember CLI将const app = new EmberApp({ outputPaths: { app: { html: 'index.aspx' } } }); 而不是index.aspx写入文件系统:

screenshot of file manager

你可以read more about configuring output paths of your Ember CLI application in user-guide.

您也可以直接在Ember CLI的index.html source code中进行挖掘,看看是否可以根据需要调整选项。

  

是否有可能使其依赖环境?它完美地运作   用于生产构建。但它自Ember以来不适用于开发   CLI无法提供.aspx文件。所以覆盖输出会很好   仅用于生产的文件构建,并使用通用文件进行开发   和测试环境。

您可以通过检查ember-app.js的值来实现此目的。因此,在app.env中,不要将ember-cli-build.js作为参数传递,而是使用以下技术:

outputPaths

这样,在构建const app = new EmberApp(); if (app.env === 'production') { app.options.outputPaths.app.html = 'index.aspx'; } 时,index.aspx仍会dist/ production,但developmenttest环境'outputPaths选项未受影响和现场开发/测试工作。