在 Heroku 的快速节点中存储 api 键的位置
where to store api keys in express node for Heroku
我正在完成一个 node express 应用程序,其中我有一个用于 Sendgrid 和 Stripe 的 API 键,但我不确定如何将这些存储在我将部署在 Heroku 上的应用程序中(还有一些其他变量我想像数据库密码一样存储类似的东西)。我在网上看到很多人都在使用 process.env
,所以经过一番观察后,我尝试使用 dotenv
npm,甚至在尝试使用 dotenv
作为我的 sendgrid 密钥后,应用程序的结构也出现了一些问题我每次都出错。
我的问题是有人可以提供一些详细的说明或方法 安全地 将 API 密钥存储在我将部署到 Heroku 的 node express 应用程序中吗?
P.S。我按照教程通过 facebook、google 和 linkedIn 为 Oauth2 实现 Passport.js
,以便用户可以轻松登录应用程序。应用程序机密、ID 和回调是从我的应用程序的文件夹调用配置中的 json 文件中检索的。此信息至少在其在应用程序中的放置和检索方面是否安全?我应该为我的 sendgrip 和 stripe api 键做类似的事情吗? (下图)
您可以这样设置文件夹目录:
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,则可以按照我之前在此答案中发布的 link 进行操作,而不必设置它们。只需在 heroku 界面中定义它们,它就会为您加载它们。
我正在完成一个 node express 应用程序,其中我有一个用于 Sendgrid 和 Stripe 的 API 键,但我不确定如何将这些存储在我将部署在 Heroku 上的应用程序中(还有一些其他变量我想像数据库密码一样存储类似的东西)。我在网上看到很多人都在使用 process.env
,所以经过一番观察后,我尝试使用 dotenv
npm,甚至在尝试使用 dotenv
作为我的 sendgrid 密钥后,应用程序的结构也出现了一些问题我每次都出错。
我的问题是有人可以提供一些详细的说明或方法 安全地 将 API 密钥存储在我将部署到 Heroku 的 node express 应用程序中吗?
P.S。我按照教程通过 facebook、google 和 linkedIn 为 Oauth2 实现 Passport.js
,以便用户可以轻松登录应用程序。应用程序机密、ID 和回调是从我的应用程序的文件夹调用配置中的 json 文件中检索的。此信息至少在其在应用程序中的放置和检索方面是否安全?我应该为我的 sendgrip 和 stripe api 键做类似的事情吗? (下图)
您可以这样设置文件夹目录:
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,则可以按照我之前在此答案中发布的 link 进行操作,而不必设置它们。只需在 heroku 界面中定义它们,它就会为您加载它们。