【发布时间】:2016-08-08 21:21:57
【问题描述】:
我不明白序列化和反序列化如何使用 express session。
当我安装 Express-session 时,它说我需要一个序列化和反序列化功能:
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
Server.js 从登录表单发布路由:
router.post('/login', passport.authenticate('login', {
successRedirect: '/home',
failureRedirect: '/',
failureFlash : true
}));
我的问题是,当用户尝试从我的 HTML 上的form 登录并点击上面指定的端点'/login' 时,这就是快速会话发挥作用的地方吗?所以 express session 将创建一个会话 id 为 user._id 的 cookie,正如我的 serializeUser 函数中指定的那样,它会将这个 cookie 提供给客户端?因此,现在当客户端在端点'/login' 向同一台服务器发出任何后续请求时,它将自动调用反序列化用户,而无需通过passport 中提供的passport 中间件@?
我不确定这两个序列化函数何时何地被调用,以及 express session 如何实际使用它们?任何澄清将不胜感激。
【问题讨论】:
-
这有帮助吗?:*.com/questions/22052258/… .. 我看到投票最多的答案解释了很多关于会话和护照的工作原理。
-
是的,这很有帮助!只是一些澄清:所以基本上在用户第一次使用
login策略登录之后,cookie被保存在该用户的内存中,并且每次用户登录时,它都会将cookie传递给服务器并调用passport.authenticate('session')策略而不是login策略正确吗?
标签: javascript node.js cookies