您如何向外行解释Passport的序列化和反序列化方法的工作流程。
叫到哪里
user.id
去passport.serializeUser
了?我们
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); }); });
我仍在努力寻找解决方案。我有一个完整的工作应用程序,没有遇到任何类型的错误。
我只是想了解这里到底发生了什么?
任何帮助表示赞赏。
对于使用Koa和koa-passport的任何人:
知道在serializeUser方法中设置的用户密钥(通常是该用户的唯一ID)将存储在:
this.session.passport.user
当
done(null, user)
在deserializeUser中设置时,“ user”是数据库中的某些用户对象:this.req.user
要么this.passport.user
由于某种原因,
this.user
当您在deserializeUser方法中调用done(null,user)时,永远不会设置Koa上下文。因此,您可以在调用app.use(passport.session())之后将自己的中间件放入this.user中,如下所示:
如果您不清楚serializeUser和deserializeUser的工作方式,请在Twitter上打我。@yvanscher