您如何向外行解释 Passport 的序列化和反序列化方法的工作流程。
passport.serializeUser
被调用后,user.id
去哪儿了?我们在它之后调用
passport.deserializeUser
它在工作流中的什么位置?// used to serialize the user for the session passport.serializeUser(function(user, done) { done(null, user.id); // where is this user.id going? Are we supposed to access this anywhere? }); // used to deserialize the user passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });
我仍在努力解决它。我有一个完整的工作应用程序并且没有遇到任何类型的错误。
我只是想了解这里到底发生了什么?
感谢任何帮助。
最佳答案
- Where does
user.id
go afterpassport.serializeUser
has been called?
用户 ID(您作为 done
函数的第二个参数提供)保存在 session 中,稍后用于通过 deserializeUser
函数检索整个对象.
serializeUser
确定用户对象的哪些数据应该存储在 session 中。 serializeUser 方法的结果以 req.session.passport.user = {}
的形式附加到 session 。例如,它会是(因为我们提供用户 ID 作为键)req.session.passport.user = {id: 'xyz'}
- We are calling
passport.deserializeUser
right after it where does it fit in the workflow?
deserializeUser
的第一个参数对应于提供给 done
函数的用户对象的键(参见 1.)。因此,您的整个对象都是在该键的帮助下检索的。这里的键是用户 ID(键可以是用户对象的任何键,即姓名、电子邮件等)。
在 deserializeUser
中,该键与内存数组/数据库或任何数据资源匹配。
获取的对象作为req.user
视觉流
passport.serializeUser(function(user, done) {
done(null, user.id);
}); │
│
│
└─────────────────┬──→ saved to session
│ req.session.passport.user = {id: '..'}
│
↓
passport.deserializeUser(function(id, done) {
┌───────────────┘
│
↓
User.findById(id, function(err, user) {
done(err, user);
}); └──────────────→ user object attaches to the request as req.user
});
关于node.js - 了解 Passport 序列化反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27637609/