express.js/sails.js 中的身份验证和会话

Authentication & Sessions in express.js/sails.js

一直在学习航行教程,但对课程的工作方式感到困惑。

在本教程中,用户通过以下方式在会话控制器中标记为已通过身份验证:

req.session.authenticated = true;
req.session.User = user;
res.redirect('/');

为什么在请求中保存会话?!我的理解是express.js中的'req'对象是浏览器发送给服务器的信息

服务器不应该把这个信息保存在别处吗(当有另一个请求时请求对象不会被删除吗?)

此外,在使用 ejs 模板化页面时,应用程序会以某种方式从另一个对象会话中检索身份验证状态:

<% if (session.authenticated) { %>

为什么不直接设置这个变量?

可能是个愚蠢的问题,但我对逻辑的运作方式感到困惑,在线 articles/tutorials 无法帮助我理解...

浏览器发送存储在 cookie 上的会话 ID。会话对象由存储在服务器端的会话 ID 引用。会话附加到请求(我想是为了方便)。您可以在此处阅读更多内容 https://github.com/expressjs/session#compatible-session-stores

如果不查看更多代码,我将不知道设置 session.authenticated 的内容。

express 中间件(请记住,Sails 是基于 express 构建的)将属性附加到 req 对象是常见的做法,因此它可以在以后的中间件中访问,并最终在您的控制器中访问。幕后发生的事情是你的 req 对象带有一个包含会话 ID 的 cookie,然后会话中间件使用它从一些数据存储中检索实际会话数据(默认情况下,使用内存存储. 超级快速且易于开发,但不推荐用于部署),然后将其附加到 req 对象。

关于 EJS 中 session.authenticated 的值,默认情况下 Sails 在 res.locals 中包含 req.session(可在视图中访问),因此该值将是存储在会话中的任何值通过你的控制器。