在Heroku

时间:2016-11-25 16:36:28

标签: node.js security express stripe-payments api-key

我正在完成一个节点快速应用程序,其中我有一个用于Sendgrid和Stripe的API密钥,但我不知道如何在我的应用程序中存储这些将部署在Heroku上(也是我想要存储的一些其他变量)类似于db密码和什么不是)。我在网上看到很多人都在使用process.env所以看了之后我尝试使用dotenv npm甚至在尝试使用dotenv我的sendgrid密钥后对应用程序的结构有些问题我每次都有错误。

我的问题是,有人可以提供一些详细的说明或安全在我的节点快递应用程序中存储API密钥的方法,我将部署到Heroku吗?

P.S。我按照教程通过facebook,google和linkedIn为Oauth2实现Passport.js,以便用户可以轻松登录到应用程序。应用程序秘密,id和回调是从我的应用程序中的文件夹调用配置中的json文件中检索的。这些信息至少在应用程序中的放置和检索中是否安全?我应该为sendgrip和条带api键做类似的事情吗? (下图)

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以像这样设置文件夹目录:

config

<强> config.js

var config = {};
//development
var env = process.env.NODE_ENV || 'development';
if(env === 'development'){
  config = require('./env/development');
}else if (env === 'test'){
    config = require('./env/test');
} else if(env === 'production'){
    config = require('./env/production');
}

module.exports = config;

<强> development.js

var envFile = __dirname + '/env.json';
var jsonfile = require('jsonfile');

var envVars = jsonfile.readFileSync(envFile);

module.exports = {
    value: envVars["VALUE"] 
};

<强> production.js

module.exports = {
    value: process.env.VALUE 
};

<强> test.js

module.exports = {
    value: 'Some value' 
};

这里的基本思想是每个开发人员都可以在自己的env.json文件中配置自己的密钥。对于生产,您可以将它们存储在某个安全的文件中,然后在运行应用程序之前将它们加载到环境中。使用heroku,可以轻松配置这些环境变量并为您存储它们。查看here

您还可以省略任何您可能不需要的详细信息,例如开发或测试内容。

编辑:示例

首先从命令行尝试此操作,以了解正在发生的事情。在这个例子中我使用的是linux。如果您正在使用其他任何东西,只需研究如何在您正在使用的命令行中设置环境变量。

<强> app.js

var config = require('./config/config');
//get value from config
var value = config.value;

从bash命令行设置环境变量

$: VALUE="my value"
$: NODE_ENV="production"
$: export VALUE
$: export NODE_ENV

运行应用

$: node app.js

或者如果您使用的是npm脚本

$: npm start

当您运行应用程序节点时,将自动加载process.env以及命令行shell中定义的每个环境变量。现在,如果你使用的是heroku,你可以按照我之前在这个答案中发布的链接进行操作,你不必设置它们。只需在heroku界面中定义它们,它就会为你加载它们。