3 回答

TA貢獻1719條經(jīng)驗 獲得超6個贊
對于使用Koa和koa-passport的任何人:
知道在serializeUser方法中設置的用戶密鑰(通常是該用戶的唯一ID)將存儲在:
this.session.passport.user
當done(null, user)在deserializeUser中設置時,“ user”是數(shù)據(jù)庫中的某些用戶對象:
this.req.user 要么 this.passport.user
由于某種原因,this.user當您在deserializeUser方法中調(diào)用done(null,user)時,永遠不會設置Koa上下文。
因此,您可以在調(diào)用app.use(passport.session())之后將自己的中間件放入this.user中,如下所示:
app.use(function * setUserInContext (next) {
this.user = this.req.user
yield next
})
如果您不清楚serializeUser和deserializeUser如何工作,請在Twitter上打我。

TA貢獻2019條經(jīng)驗 獲得超9個贊
您可以將整個用戶對象放入會話數(shù)據(jù)中,但這通常不是一個好主意,因為它可能會有其他副作用。例如,當用戶更新他/她的用戶名時,您也必須更新會話數(shù)據(jù),否則,由于“重命名功能損壞”,您將獲得票證。那是一個相對無害的例子。權限位或相等的敏感數(shù)據(jù)也可能發(fā)生同樣的事情(糟糕...)。本質(zhì)上,如果您有重復的數(shù)據(jù),通常會遇到相同的問題。TL; DR-不要這樣做。
添加回答
舉報