在MEAN堆栈中存储API密钥

时间:2015-10-02 16:30:48

标签: angularjs google-places-api mean-stack

寻找在Google平台堆栈中存储(安全)Google Places API密钥的最佳方式。我打算使用.env文件,但我不知道如何实现这个。我目前的解决方案是明确拉入.env变量,但后来我不知道从那里采取什么路径将密钥插入脚本标记。我无法从如何使用模板的角度找到任何东西,所以我得出结论我将不得不使用另一个模板库,如把手。我真的不喜欢这种方法,是否有另一种最佳实践'解决这个问题的方法?

3 个答案:

答案 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/

祝你好运!