node.js - crypotjs - 使用 findOne() 解密值
问题描述
我已经加密了一个 URL 值并将其存储在 MongoDB 中。我不明白的是,如果它是加密的,findOne 将如何找到 URL。我不认为我可以使用 generatedUrl 再次加密,并且值将匹配。也许有比加密更好的方法?
在这里加密
app.post("/api/users/passwordurl", function(req, res) {
crypto.randomBytes(16, (err, buf) => {});
let iv = crypto.randomBytes(16);
let hash = crypto
.createHash("sha256")
.update(req.body.url)
.digest("hex");
let secret_message = req.body.url;
let key = "12345678123456781234567812345678";
let cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
let encrypted = cipher.update(secret_message, "utf-8", "hex");
encrypted += cipher.final("hex");
console.log("encrypted: " + encrypted);
const url = new Url({
url: encrypted,
used: false
});
//saves to database with mongoose
url.save().then(result => {
res.status(201).json({
message: "URL success",
postId: result._id
});
});
});
这里需要解密
app.get("/resetpassword/:id/:token", function(req, res) {
User.findById(req.params.id).then(user => {
if (!user) {
return res.status(401).json({
message: "Auth failed"
});
}
var secret = user.password + "-" + user.passwordCreated.getTime();
var payload = jwt.decode(req.params.token, secret);
console.log("USER FOUND: ", user);
let generatedUrl = `http://localhost:3000/resetpassword/${payload.id}/${req.params.token}`;
Url.findOne({ url: generatedUrl }).then(url => {
if (!url) {
res.send("link has expired");
res.end();
} else {
res.send(
'<form action="/resetpassword" method="POST">' +
'<input type="hidden" name="id" value="' +
payload.id +
'" />' +
'<input type="hidden" name="token" value="' +
req.params.token +
'" />' +
'<input type="password" name="password" value="" placeholder="Enter your new password..." />' +
'<input type="submit" value="Reset Password" />' +
"</form>"
);
}
});
});
});
解决方案
推荐阅读
- javascript - 使用 js 以编程方式发布 instagram 评论
- python - Asyncio 运行返回结果的任务
- sql-server - 如何在 SQL Server 中为以下逻辑编写 CASE 语句?
- python - 如何在 def 外使用 def 内的值
- python - 从与程序位于同一文件夹中的文件夹中加载图像
- javascript - GooglePlacesAPI 不再显示 author_name 和 profile_photo_url
- r - R googleway:使用不同的调色板
- python - 多对多关系 Django
- javascript - 承诺,更新父范围变量
- jquery - 使用 Jquery 为组织结构图制作工具提示