javascript - 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
包将我的管理员密码存储在环境变量中。
我尝试了以下方法:
创建了一个 default.json 文件:
{ "adminPassword": "" }
创建了一个 custom-environment-variables.json 文件:
{ "adminPassword": "fifteen_adminPassword" }
然后将我的代码修改为:
const admin = new Admin({
username: "admin",
password: config.get("adminPassword")
});
最后我设置了 env 变量export fifteen_adminPassword=12345
,但是在我进行身份验证时这会因为密码无效而失败。
解决方案
我以前使用过配置包,但我太头疼了。所以我切换到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 会报错。
推荐阅读
- git - Git - 只有最近 10 次提交的历史记录?
- macos - NET::ERR_CERT_INVALID 在 MacOS 上的 Chrome 中没有“继续”选项
- node.js - 在没有“节点服务器”命令的情况下运行 Nodejs 脚本
- azure - Azure 数据资源管理器群集 - 详细信息:“禁止访问资源。”
- python - 如何使用 paramiko python 从 sftp 文件中解码 Zip 文件
- flutter - TextInputType.numberWithOptions 不显示逗号或点
- powershell - Yeoman SharePoint 生成器安装问题。(不支持的引擎)
- docker - 在 Windows 上的 /etc/hosts 文件中映射的 IP 地址
- python - 两个相同的 AutomationID 使用 xpath python 和 appium
- python - 如何在未附加到会话的 SQLAlchemy 中创建嵌套查询?