如何向外行解释Passportserialize和deserialize方法的工作流。
>
我们在它之后调用
// 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);
});
});
我还在努力想办法。我有一个完整的工作应用程序,并没有运行到任何类型的错误。
我只想知道这里到底发生了什么?
感谢任何帮助。
用户id(作为
获取的对象作为
视觉流
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
});
对于使用Koa和KOA-Passport的任何人:
知道serializeUser方法中设置的用户键(通常是该用户的唯一id)将存储在:
当您在deserializeUser中设置
由于某种原因,当您在deserializeUser方法中调用DoneNull,user)时,
所以您可以在调用app.use(Passport.Session())之后编写自己的中间件,将其放入this.user中,如下所示:
app.use(function * setUserInContext (next) {
this.user = this.req.user
yield next
})
如果您不清楚serializeUser和deserializeUser是如何工作的,请在Twitter上与我联系。电子邮件:Yvanscher