【发布时间】:2017-01-13 09:58:34
【问题描述】:
我正在构建一个包含用户登录的 Sails.js 应用程序。正如文档所指示的,当用户登录时,会话会相应地在会话中记录她的 id:
req.session.userId = createdUser.id;
在大多数示例中,每个路由都会在此 ID 上执行查找(如果存在),如果找到,则将经过身份验证的用户发送到视图。这让我觉得非常低效。每个视图都需要知道是否有登录用户,以便在左上角显示她的名字。因此,如果我理解正确的话,每个视图都包含访问数据库以查找用户,即使我通过创建为每个路由执行此查找的策略来减少代码量。
我宁愿在会话中记录用户的信息,这样,一旦她通过身份验证,该信息就会自动呈现给每个视图:
req.session.userId = createdUser.id;
createdUser.loggedIn = true;
req.session.user = createdUser;
// the createdUser object does NOT contain the encrypted password or other sensitive info
然后,我可以像这样从 layout 父模板(和任何子模板)签入已登录用户的模板。 (我使用的是服务器端视图。)
{% if (session.user && session.user.loggedIn) %}
<li><a href="/profile/{{ session.user.id }}">Hi there, {{ session.user.username }}</a></li>
{% else %}
<li><a href="/signin">Sign In (if you want)</a></li>
{% endif %}
我的问题是这是否会带来任何形式的安全风险。它似乎比在每个视图中查找用户更有效,但文档似乎建议这样做可能是有原因的?
【问题讨论】:
标签: session model-view-controller sails.js