【问题标题】:Pass session variable from controller to view in express js将会话变量从控制器传递到 express js 中查看
【发布时间】: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


【解决方案1】:

首先,在 app.router() 中间件之前使用 app.use() 中间件非常重要。

您可以在应用中间件中尝试这种方式

app.use((req, res, next) => {
    res.locals.myVar = 'sample value';
    next();
});

要获取myVar的值,在jade文件中使用

index.jade

extends layout
block content
    value of myVar is #{myVar}

瞧!!!

但是您可能也想更改您现在正在使用的程序。这不是一个有前途和安全的方法。尝试使用适当的 JSON 值呈现页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多