我正在设计我的新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服务器会自动放置令牌。我更喜欢这种方式,但我不确定它是否可行。如果它是如何做到这一点?
也许,还有另一种更好的方法吗?任何帮助和建议将不胜感激。
答案 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
写入文件系统:
你可以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
,但development
和test
环境'outputPaths
选项未受影响和现场开发/测试工作。