【发布时间】:2017-06-04 22:20:37
【问题描述】:
在使用此代码登录应用程序后在快速控制器中重定向到主页:
req.session.user = user.userLogin;
if (req.session.user=='Admin') {
global.loggedAdmin = user.userLogin;
}
else {
global.loggedUser = user.userLogin;
}
res.redirect('/');
并在主菜单中检查用户是否已登录:
nav#menu.panel(role='navigation')
ul
li
if loggedUser
li
span.setting Welcome #{loggedUser}
a(href='/account')
i.fa.fa-cog
li
hr
li
a(href='/logout') Logout
li
else if loggedAdmin
li
span.setting Welcome #{loggedAdmin}
a(href='/account')
i.fa.fa-cog
li
hr
li
a(href='/articles') Articles
li
hr
li
a(href='/files') Files
li
hr
li
a(href='/users') Users
li
hr
li
a(href='/logout') Logout
else
li
a(href='/login') Log in
li
hr
li
a(href='/register') Register
在 app.js 中:
app.use(session({
secret: 'sdfghjkl2345678tyu',
unset:'destroy',
resave: false,
saveUninitialized: false
}));
但是当第一次以管理员身份登录并从另一个设备菜单打开网站时,会捕获用户以管理员身份登录。我可以在不使用全局控制器的情况下将会话变量传递给 pug 模板吗?如果可以,该怎么做?
【问题讨论】:
-
当然可以……你是如何编译/渲染 pug 模板的?您可以在执行暴露给模板逻辑的任一操作时传递本地变量,而不是依赖全局变量。将
isAdmin之类的关键标志暴露给全局范围是非常糟糕的做法,正如您所展示的那样,非常不安全。尽量避免在您的应用程序逻辑中使用全局变量。
标签: javascript express authorization