我有一个应用程序,我在尝试加密userID
之前将其发送到客户端。这样做的原因是因为我使用EJS作为诱人的引擎,这意味着我有代码,我使用userID
就像这样:
<body ng-init="getAllPosts('<%= user._id' %>)"></body>
这个问题是当有人做&#34;检查元素&#34;在任何浏览器上,他们都可以清楚地看到他们的userID
。 请参见下图:
要解决此问题,我在发送给客户端之前就开始加密userID
,例如s0:
app.get('/profile',isLoggedIn,function(req, res) {
var user = req.user;
var uid = encrypt(JSON.stringify(user._id));
res.render('profile.ejs', {
userID: uid
});
});
这会成功加密ID,如下图所示:
问题:
问题是我可以成功解密ID,但即使解密后我也无法从数据库中获取数据。我已经尝试将解密的ID粘贴到我的路由中并成功获取数据。 它就像它没有从变量中读取解密的ID,但是在复制粘贴它时会起作用。
下面是代码:
app.get('/user/posts/:id', isLoggedIn, function(req, res){
var x = decrypt(req.params.id)
Posts.findOne({userID:x}, function(err, post){
if(err)
console.log(err);
else if(post){
res.json(post);
} else if(!post){
res.json({message: "No Posts document exists for this user"});
}
});
});
需要注意的是变量x
包含解密的ID是文本形式!
这里有更多信息,我的加密&amp;解密功能:
//Encrypt Data
function encrypt(text){
var cipher = crypto.createCipher(algorithm,key)
var crypted = cipher.update(text, 'utf8', 'base64')
crypted += cipher.final('base64');
console.log("CRYPTED " + crypted);
return crypted;
}
//Decrypt Data
function decrypt(text){
var decipher = crypto.createDecipher(algorithm,key)
var dec = decipher.update(text, 'base64', 'utf8')
dec += decipher.final('utf8');
console.log("DECRYPTED " + dec);
return dec;
}
解密功能的输出:
答案 0 :(得分:0)
发现问题,问题是我是个白痴。
我需要做的就是改变以下这一行:
Posts.findOne({userID:x})
以强>
Posts.findOne({userID: JSON.parse(x)})
以上解决了这个问题。