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

时间:2015-04-29 00:48:54

标签: node.js express sails.js

一直在研究帆船演员教程,并对会议的工作方式感到困惑。

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

group by

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

服务器是否应该将此信息保存在别处(当另一个请求时,请求对象被删除?)

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

select disease.name, count(diagnosed.diseaseid) as timesdiagnosed
from disease
left join diagnosed on disease.diseaseid = diagnosed.diseaseid
group by disease.name
having count(diagnosed.diseaseid) <= 2
order by disease.name

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

可能是一个愚蠢的问题,但我对逻辑如何运作感到困惑,在线文章/教程并没有帮助我理解......

2 个答案:

答案 0 :(得分:2)

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

我不知道在没有看到更多代码的情况下设置session.authenticated是什么。

答案 1 :(得分:2)

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

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