我几天前开始学习 Node.js,我面临一个关于数据库凭据和 Gmail 的问题。连接(nodemailer
需要最后一个)。
我基本上创建了一个这样的文件:
const config = {
development: {
url: '127.0.0.1',
database: {
host: 'mongodb://localhost',
port: '27017',
db: 'foo'
},
gmail: {
username: 'foo@gmail.com',
password: 'foo',
},
server: {
host: '127.0.0.1',
port: '3000'
}
},
production:{
url: 'https://my.site.com',
database: {
host: '127.0.0.1',
port: '27017',
db: 'foo'
},
gmail: {
username: 'foo@gmail.com',
password: 'foo',
},
server: {
host: '127.0.0.1',
port: '3000'
}
}
};
module.exports = config;
我不喜欢在应用程序中输入这些信息,所以经过一番研究我发现了这个库:dotenv .该库将信息存储在 process.env 中。 属性,但实质是一样的......为什么我应该更喜欢像 dotenv
这样的解决方案来反对我的 config
模块?
你有什么建议?
最佳答案
我绝对推荐 dotenv,这就是它的创建目的。但是,我特别推荐使用 dotenv-safe npm 包。与 dotenv 相比,它提供了升级的功能。
既然你不会推送你的.env.xy
文件到版本管理(例如 Git),其中包含所有敏感数据,您很快就会对应该将哪些变量放入环境文件中感到困惑,特别是如果您在团队中工作。
假设亚当创建了一个新的环境变量,在他的代码中使用它并推送他的代码。由于环境文件位于文件 .gitignore 中,因此您只会在您的代码尝试使用变量 并中断时注意到 Adam 引入了一个新的环境变量。但是,使用 dotenv-safe,你推送你的 .env.example
具有有效键但具有虚拟值的文件,例如 MY_API_KEY=somerandomgibberish
到 Git,而你的真正值(value)是 MY_API_KEY=aaf347xkhskallmtopsecret
在您的.env.production
文件。
如果您的真实 .env 文件(在本例中为 .env.production
),Dotenv-safe 不允许运行您的应用程序, 与文件 .env.example
相比有任何不匹配的键您刚刚从 Git 中提取的。这样,您会发现 Adam 在启动您的应用程序时添加了他的新环境变量。
这样,一旦您的应用程序具有它在.env.example
中预定义的所有变量,就不会出现意外行为。 ,从长远来看,可以保护您免受很多麻烦和数千次不必要的重新部署。 :)
关于node.js - 在 Node.js 中存储敏感凭据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55021963/