node.js - 在 Node.js 中存储敏感凭据的最佳方式是什么?

标签 node.js express

我几天前开始学习 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/

相关文章:

node.js - 扩展按钮以显示长消息

javascript - 如何使用 Puppeteer 保持 Chromium 打开?

node.js - Perl 在 Lambda 函数中不可用(运行时为 Node.js 8.10)

json - 错误函数未返回 JSON 格式

typescript - 无法使用 bodyParser 获取请求正文

node.js - gulp 任务根据文件名动态创建文件夹

javascript - Azure移动服务javascript后端如何设置和读取cookies?

javascript - 脚本有效但不适用于 node.js

node.js - 使用 passport.js 将本地策略连接到另一个(Facebook、Twitter、Google 等)

javascript - Express 4.0 主体解析器对路由处理程序不可见