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