为了账号安全,请及时绑定邮箱和手机立即绑定

了解护照序列化反序列化

了解护照序列化反序列化

慕姐4208626 2019-09-27 16:41:46
您如何向外行解释Passport的序列化和反序列化方法的工作流程。叫到哪里user.id去passport.serializeUser了?我们passport.deserializeUser紧接着在工作流程中调用它吗?// used to serialize the user for the sessionpassport.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 userpassport.deserializeUser(function(id, done) {    User.findById(id, function(err, user) {        done(err, user);    });});我仍在努力寻找解决方案。我有一个完整的工作应用程序,没有遇到任何类型的错误。我只是想了解这里到底发生了什么?任何帮助表示赞赏。
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

对于使用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中,如下所示:


app.use(function * setUserInContext (next) {

  this.user = this.req.user

  yield next

})

如果您不清楚serializeUser和deserializeUser如何工作,请在Twitter上打我。


查看完整回答
反对 回复 2019-09-27
?
慕少森

TA贡献2019条经验 获得超9个赞

您可以将整个用户对象放入会话数据中,但这通常不是一个好主意,因为它可能会有其他副作用。例如,当用户更新他/她的用户名时,您也必须更新会话数据,否则,由于“重命名功能损坏”,您将获得票证。那是一个相对无害的例子。权限位或相等的敏感数据也可能发生同样的事情(糟糕...)。本质上,如果您有重复的数据,通常会遇到相同的问题。TL; DR-不要这样做。

查看完整回答
反对 回复 2019-09-27
  • 3 回答
  • 0 关注
  • 1270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信