好吧,所以我只是进入MEAN堆栈,并且正在尝试使用Passport.js构建应用程序。如何使用passport.js正确实现serializeUser?
我刚刚开始用户序列化来维护会话。在他们为榜样,Passport使用该序列化和反序列化:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
所以,我的问题是:被认为是安全的这个例子吗?如果我理解这个权利,这是不是意味着客户端可以伪造用户标识以登录为具有该标识的用户?
我猜我问的是,是他们的例子认为是“安全”和做事的正确方法,或者是预期你会改变这些功能来生成唯一的序列化。如果这被认为是安全的,那么我想我缺少这是如何工作的东西,我很乐意在需要填补。
在另一方面,如果这是不是安全的,我希望我写的自己的功能代替这些,下面是这样做的有效和安全的方式:
- 在用户序列化后,生成一个随机哈希,并把它放在用户的数据库条目。随机哈希是表示该用户的序列号。
- 反序列化后,查找数据库中的随机散列并返回相应的用户。如果没有发现哈希引发某种错误。
- 当用户注销时,从其数据库中的条目中删除其串行散列。
如果我的逻辑直到这里是有效的,那么生成这个随机哈希的正确方法是什么?
好吧,最终passport.user可以是我想要的任何东西,因为它不会被发送到客户端,对吧? – danielhep
理论上是的,但没有尝试过,如果返回例如。对象或数组工作。 – vesse