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

sfa*_*oso 4 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;
Run Code Online (Sandbox Code Playgroud)

我不喜欢在应用程序中输入这些信息,所以经过一些研究,我找到了这个库:dotenv。该库将信息存储在process.env属性内,但实质是相同的......为什么我应该更喜欢像dotenv针对我的config模块的解决方案?

你有什么建议?

f4z*_*k4s 6

我绝对推荐dotenv,这就是它创建的目的。但是,我特别建议使用dotenv-safe npm 包。与dotenv相比,它提供了升级的功能。

\n

由于您不会将.env.xy包含所有敏感数据的文件推送到版本管理(例如 Git),因此您很快就会对应该将哪些变量放入环境文件中感到困惑,尤其是在团队中工作时。

\n

让\xe2\x80\x99s 说 Adam 创建一个新的环境变量,在他的代码中使用它并推送他的代码。由于环境文件位于文件.gitignore中,因此当您的代码尝试使用该变量并中断时,您只会注意到 Adam 引入了一个新的环境变量。然而,使用dotenv-safe.env.example ,您可以使用有效密钥(但使用虚拟值)将文件推送到 Git,例如,将文件MY_API_KEY=somerandomgibberish推送到 Git,而真正的值将在文件MY_API_KEY=aaf347xkhskallmtopsecret.env.production

\n

如果您的真实.env文件(在本例中).env.production.env.example您刚刚从 Git 中提取的文件相比有任何不匹配的密钥,则 Dotenv-safe 不允许运行您的应用程序。这样,您就会发现 Adam 在启动您的应用程序时添加了他的新环境变量。

\n

这样,一旦您的应用程序拥有了在 中预定义的所有变量,就不会出现意外的行为,.env.example从长远来看,可以保护您免受许多麻烦和数千次不必要的重新部署。:)

\n