我试图把我的头绕在passport.js上,并且确定我没有正确使用它。
特别是serializeUser()
和deserializeUser()
功能。我的函数看起来类似于下面的两个。我本质上是将我的数据库推user._id
送到会话中(我不喜欢这样做),并且可以使用 cookie 查看器在浏览器中轻松查看它。
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
done(null, id);
});
因此,对于每个安全请求,我都会运行一个isAuthenticated()
函数来检查用户是否使用 Passport 进行了身份验证,然后我使用反序列化的 ID 在req.user
数据库上执行各种 CRUD 操作。
我想知道的是什么会阻止经过身份验证的用户在会话中用其他人的 user._id 替换他们自己的 user._id,并获得对不同用户的所有这些 CRUD db 操作的访问权限。
- 护照是否有某种散列算法来检查序列化数据是否被篡改?
- 我不应该将返回的 ID 用于我的数据库 CRUD 操作吗?
- 还有另一种方法可以避免将 user._id 发送到浏览器吗?