首页 > 解决方案 > Node.js - 在环境变量中存储密码

问题描述

我正在为我的应用程序创建管理员凭据,模型非常简单,它具有用户名和密码属性以及一些验证。我有一个功能,可以将一些信息填充到数据库中。

async function init() {
  const admin = new Admin({
    username: "admin",
    password: "12345"
  });

  const salt = await bcrypt.genSalt(10);
  admin.password = await bcrypt.hash(admin.password, salt);

  try {
    await admin.save({ username: admin.username });
  } catch (ex) {
    console.log(ex.message);
  }
}

但是,通过这种方法,我将密码保存在我的源代码中,我不希望这样。我在想也许我可以使用config包将我的管理员密码存储在环境变量中。

我尝试了以下方法:

const admin = new Admin({ username: "admin", password: config.get("adminPassword") });

最后我设置了 env 变量export fifteen_adminPassword=12345,但是在我进行身份验证时这会因为密码无效而失败。

标签: javascriptnode.jsenvironment-variablesconfig

解决方案


我以前使用过配置包,但我太头疼了。所以我切换到env-cmd包。以下是您应该如何实施:

npm install env-cmd

然后在您的根文件夹中创建一个 /config 目录。在其中创建一个 dev.env 文件。像这样在这里输入你的变量

/config/dev.env

PORT=3000
ADMIN_PASSWORD=fifteeen_adminpassword

请注意,为了命名约定,环境变量总是大写字母,我们用“_”分隔它们。和值不是字符串。

现在您需要配置 package.json 文件。在“脚本”中,我们通常有启动、开发、测试脚本。start 用于部署平台,为我们当前的开发环境进行测试和开发。如果您使用的是 nodemon(很可能是),您的开发脚本应该是这样的。

"scripts": {
    "start": "node src/index.js",
    "dev": "nodemon src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

当你运行时npm run dev,终端会运行它nodemon src/index.js。这是任何节点应用程序的基本配置。现在我们需要传递存储在 /config/dev.env 中的变量。到我们的应用程序。为此将“开发”更改为

"dev": "env-cmd -f ./config/dev.env nodemon src/index.js",

现在 env-cmd 包将您传递给 /config/dev.env 的所有变量设置为环境变量。现在你像这样使用它们:

const admin = new Admin({
        username: "admin",
        password: process.env.ADMIN_PASSWORD
      });

请注意,当您将项目部署到 github 时,您已将配置文件夹名称添加到 .gitignore 文件中。所以你的密码或 api 密钥不会公开。

每次您向 dev.env 终止终端进程添加新变量并重新启动它时也是如此。mongodb 会报错。


推荐阅读