Mailchimp在我使用cyclic.sh部署的Node.js/Express应用程序中使用注册表单时不断撤销/禁用我的API密钥。我从mailchimp收到一封邮件,说我的API密钥被公开发布在网上,因为我在GITHUB上托管我的代码,并且存储库是公开的。那么,我如何解决这个问题并阻止我的API密钥被禁用?我是不是应该加密我的密钥什么的?
const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");
const https = require("https");
const { response } = require("express");
const app = express();
app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/", function (req, res) {
res.sendFile(__dirname + "/signup.html");
});
app.post("/", function (req, res) {
const firstName = req.body.fName;
const lastName = req.body.lName;
const email = req.body.email;
const data = {
members: [
{
email_address: email,
status: "subscribed",
merge_fields: {
FNAME: firstName,
LNAME: lastName
},
}
]
}
const jsonData = JSON.stringify(data);
const url = "https://****.api.mailchimp.com/3.0/lists/**********"
const options = {
method: "POST",
auth: "ch****s1:cf3b3175*********************be29-****"
}
const request = https.request(url, options, function (response) {
var statCode = response.statusCode;
if (statCode === 200) {
res.sendFile(__dirname + "/success.html");
}
else {
res.sendFile(__dirname + "/failure.html");
}
response.on("data", function (data) {
console.log(JSON.parse(data));
});
});
request.write(jsonData);
request.end();
});
app.post("/failure", function (req, res) {
res.redirect("/");
});
app.listen(process.env.PORT || 3000, function () {
console.log("server is running on port 3000.");
});
1条答案
按热度按时间xdnvmnnf1#
为什么会发生这种情况是因为您的API密钥是私有的,因为访问API密钥的任何人都可以造成一些损害(在这种情况下,篡改或删除您在Mailchimp上的联系人)。在您的代码中,API是可见的,它会触发Mailchimp中的安全机制,最终撤销/禁用您的API密钥。
最佳实践(在本地主机上)是创建一个
.env
文件,在其中存储API密钥或任何其他敏感信息。现在,您可以像这样将API密钥粘贴到
.env
文件中然后,您可以使用
请注意,您必须安装
dotenv
包,并在代码中要求。请注意,上述流程仅适用于本地,只是一个理想情况下遵循的约定。
要在服务器上实现此功能
对您的代码进行上述更改。确保创建一个
.gitignore
并指定.env
文件的路径,这样它就不会上传到GitHub。现在,您只需在部署时设置一个名为
API_KEY
的环境变量。看看这个视频我用于参考Hiding API Keys with Environment Variables