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



一直在学习帆投射教程,并对会话的工作方式感到困惑。

在本教程中,用户在会话控制器中被标记为经过身份验证:

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

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

服务器不应该将此信息保存在其他地方(当有另一个请求时不会删除请求对象吗?

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

<% if (session.authenticated) { %>

为什么不直接设置此变量?

可能是一个愚蠢的问题,但我对逻辑的工作原理感到困惑,在线文章/教程无法帮助我理解......

快速中间件(请记住,Sails 是在 Express 上构建的)将属性附加到 req 对象,以便可以在以后的中间件中访问它,并最终访问您的控制器。在后台发生的情况是,您的req对象带有一个包含会话 ID 的 cookie,然后会话中间件使用该 Cookie 从某个数据存储中检索实际会话数据(默认情况下,使用内存中存储)。超级快速且易于开发,但不建议部署),然后将其附加到req对象。

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

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

如果没有看到更多代码,我就不知道是什么在设置session.authenticated

最新更新