我只有最简单的关于会话的概念,以及 the official documentation does not help much,因为它假设我知道会话是什么,因此也知道为什么用户需要序列化和反序列化. 这就是我认为我所知道的:一个会
这就是我认为我所知道的:一个会话就像贴在服务器冰箱上的便利贴,上面写着“用户鲍勃很酷.让他进来吧.”每次来自bob的新请求时,服务器都会检查post-it节点并说:“是的.Bob仍然很酷.”
因此序列化正在编写便利贴,反序列化正在将其删除.这就是我不明白的地方:这段代码如何编写一个post-it节点,“做”了什么?
passport.serializeUser(function(user, done) { done(null, user.id); });
以下代码如何丢弃便利贴? findByID访问我存储用户的数组.如果“后贴注”刚刚被丢弃,为什么需要访问它?
passport.deserializeUser(function(id, done) { findById(id, function (err, user) { done(err, user); }); });
究竟是什么流程呢?
这些示例的其余代码是here
你的冰箱比喻就在那里.会话确实像一个便利贴,但你写下你想要的东西.序列化是写作部分,反序列化是阅读部分.所以您的用户登录.您不希望将所有信息保留在会话中,因为它已经在您的数据库中.但是在随后的请求中,你想要记住他是谁.所以你必须写下你的帖子 – 这是他的身份证,比方说1234.通过调用已完成,你告知护照这是你想要在会话中存储的内容.
在随后的电话中,护照会检索你的帖子并说“好吧,我知道这个人,他的身份证是1234”. findById是您调用以检索其所有信息的方法,例如他的名字.通过在这里调用完成,你说“好吧,这是关于该用户的信息.他的名字是鲍勃.”
如果您想知道为什么要调用完成而不是简单地返回值,那是因为序列化和反序列化都可能是异步的.如果您想了解有关异步代码的更多信息,我强烈建议您阅读Node the right way,因为它是Node.js的核心概念.
希望这可以帮助.