【发布时间】:2019-08-22 00:38:10
【问题描述】:
我从事节点项目已经有一段时间了,并且已经实现了护照也可以处理身份验证。和很多人一样,我对护照使用的“serializeUser”和“deserializeUser”功能感到困惑,据我了解,这些功能用于将用户ID存储在会话中(req.session.passport)然后在需要时使用该 id 从数据库中获取整个对象。我不明白的是为什么你不能一开始就将整个对象存储在会话中?
我阅读了一个教程,其中这些功能的实现如下:
passport.serializeUser(function(user, done){
done(null, user);
});
passport.deserializeUser(function(user, done){
done(null, user);
});
在尝试之后,我发现这种方法没有问题,但是因为很多其他人没有存储他们的整个对象,而是只有 id 我切换到相同的方法,现在代码如下所示:
passport.serializeUser(function(user, done){
done(null, user.accountID);
});
passport.deserializeUser(function(id, done){
connection.query("SELECT * FROM accounts WHERE accountID = ?", [id], function (err, rows){
done(err, rows[0]);
});
});
这也行得通,但现在我想知道,这样做我得到了什么?只存储 ID 更有效,因为每次我需要访问我的用户对象时访问数据库似乎是不必要的。任何澄清都非常感谢:)
【问题讨论】:
-
@DanO 之前读过那篇文章并没有更明智,但是现在我也查看了 cmets,有人准确地解释了我在寻找什么。谢谢
标签: node.js passport.js passport-local