我对会话的作用只有最隐蔽的概念,the official documentation does not help much,因为它假设我知道会话是什么,因此也知道为什么用户需要序列化和反序列化。
以下是我认为我知道的内容:会话就像贴在服务器冰箱上的便利贴,上面写着"用户bob很酷。让他进来。"每次来自bob的新请求时,服务器都会检查post-it节点,然后说,"是的。鲍勃仍然很酷。"
因此序列化正在编写便利贴,反序列化正在将其删除。这是我不明白的:这段代码是如何编写一个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
答案 0 :(得分:7)
你用冰箱比喻中途到了一半。会话确实像一个便利贴,但你写下你想要的东西。序列化是写作部分,反序列化是阅读部分。
因此,您的用户就会登录。您不希望将所有信息保留在会话中,因为它已经在您的数据库中。但是在随后的请求中,你想要记住他是谁。所以你必须写下你的帖子 - 这是他的身份证明,让我们说1234.通过致电完成,你告知护照这是你想要在会议中存货的。
在随后的电话中,护照会检索你的帖子并说“好吧,我知道这个人,他的身份证是1234"。 findById是您调用以检索其所有信息的方法,例如他的名字。通过在此处调用完成,您可以说"好的,这里是关于该用户的信息。他的名字叫鲍勃。"
如果您想知道为什么要调用完成而不是简单地返回值,那么因为序列化和反序列化都可能是异步的。如果您想了解有关异步代码的更多信息,我强烈建议您阅读Node the right way,因为它是Node.js的核心概念。
希望这有帮助。