寻找在Google平台堆栈中存储(安全)Google Places API密钥的最佳方式。我打算使用.env文件,但我不知道如何实现这个。我目前的解决方案是明确拉入.env变量,但后来我不知道从那里采取什么路径将密钥插入脚本标记。我无法从如何使用模板的角度找到任何东西,所以我得出结论我将不得不使用另一个模板库,如把手。我真的不喜欢这种方法,是否有另一种最佳实践'解决这个问题的方法?
答案 0 :(得分:0)
我建议使用模块node-env-file。这就是我用于项目的内容,我对它非常满意。它的设置非常简单(查看他们的文档)并且像魅力一样工作。它从.env文件中读取变量并将它们嵌入到Node项目中。
.env
# your environment variables
API_KEY1=abcd123
app.js
var env = require('node-env-file');
var API_KEY1 = process.env.API_KEY1;
答案 1 :(得分:0)
我在我的一个项目中执行以下操作 - 它适用于我的nodemon开发环境。我通过Heroku中的配置变量存储相同的数据,以便不必将密钥包含在我的存储库中。
// loads confidential parameters to inject into process.env
var googlekey = fs.readFileSync("./ignored/privatekey.pem", "utf8");
var config = require("./server/config/local.env");
config.PRIVATE_KEY = googlekey;
//run server using nodemon
gulp.task('serve', function(){
return nodemon({
script: 'index.js',
watch: 'server/',
// ignore: ['app/**/*', 'dist/*', 'node_modules/*'],
env: config
})
.on('start', function () {
// done();
});
});
答案 2 :(得分:0)
我将假设您正在使用Google所称的“浏览器密钥”。但是,如果您使用的是“服务器密钥”,则无论如何都不应将密钥传递给客户端代码。
如果您使用Express response.render()生成HTML,则可以将API密钥作为本地密钥传递给res.render,并在HTML或模板中引用它。
以下是我使用Express渲染的jade模板的片段,它与Stripe API类似:
extends layout
block head-content
script(src='https://js.stripe.com/v2/')
script.
// <![CDATA[
Stripe.setPublishableKey('#{stripePublicKey}');
// ]]>
听起来您将密钥存储在环境变量中,因此您可以将其传递到Express渲染引擎中:
res.render('index', {stripePublicKey: process.env.STRIPE_PUBLIC_KEY});
听起来你也想避免使用jade或其他模板引擎,所以你可以使用EJS,它允许你使用'纯'HTML,但是使用变量。这是一个很好的入门教程:
http://robdodson.me/how-to-use-ejs-in-express/
如果您已经拥有大量内容,并且您不想将所有现有.html文件重命名为.ejs只是为了获取传入的一个变量,您可以这样做:
app.engine('html', require('ejs').renderFile);
如此处更详细描述:
http://expressjs.com/api.html#app.engine
听起来您已经在下面的链接中的“安全使用API密钥的最佳做法”下的其他最佳做法列表中工作,但请确保您特别遵循有关限制引荐来源网址访问的指导。
https://developers.google.com/console/help/new/
祝你好运!