最近在看nodeclub源码,卡在了github授权部分,一直没看懂passport的两个方法,serializeUser和deserializeUser两个方法的作用,看了官方文档的解释:
Passport will maintain persistent login sessions. In order for persistent sessions to work, the authenticated user must be serialized to the session, and deserialized when subsequent requests are made.
英文不太好,大概意思是:为了维持登陆状态,将已授权user信息序列化为(serializeUser)字符串保存到session, 当产生后续请求时从session中反序列化(deserializeUser)出用户对象信息user。
nodeclub中是这样做的(注释是我自己的理解):
// github oauth
passport.serializeUser(function (user, done) {
done(null, user); // user是一个包含用户信息的对象,这里将对象序列化为string保存到session中
});
passport.deserializeUser(function (user, done) {
done(null, user); // 这里是反序列化得到的用户信息对象,应该是要挂在req.user中的
});
但是在我测试的时候发现deserializeUser的回掉函数一直没被运行,一直搞不明白,求大牛解释啊。
额,没人回答,只好自己说了,因为nodeclub没有使用passport.session()中间件的原因。
正在研究这一部分内容,学习怎么写个微博登陆。
@lzxue 有passport-weibo的呀
@huanghuiquan 当时我加 passport 进来的时候,可能还没有 passport.session 这一层…