【问题标题】:Using Session variables in policies在策略中使用会话变量
【发布时间】:2014-04-22 23:18:46
【问题描述】:

我知道策略在控制器之前执行,我遇到了问题,我的项目在索引中有登录名,我需要验证密码是否正确,以防密码错误我需要显示一条消息说“密码错误”,但在同一个索引页面中,我在策略 req.session.mensaje 和 res.locals.mensaje 中声明了一个变量,我正在这样做:

这是我的政策

module.exports = function(req,res,next) {
    res.locals.mensaje= '';
    if(!req.session.mensaje) return next();
    res.locals.mensaje = _.clone(req.session.mensaje);
    req.session.mensaje='';
    next();
};

这是我的控制器

login: function (req, res, next) {

    var username = req.param('nickname');
    var passw = req.param('password');

    User.findOneByNickname(username).exec(function(err, users) {
        if (err) {
            console.log(err);
            return next(err);
        }

        if (users){
            if(users.password===passw){
                req.session.username=users.username;
                req.session.e_mail=users.e_mail;
                res.view({user: users})
            } else { 
                req.session.mensaje='Clave invalida.';
                return res.redirect('/');
            }
        }
    });
}

配置政策

'*': 'variables'

在索引中,策略尚未执行,我不能在那里使用我的变量 typeof 说是未定义的,但是当控制器被执行并且密码正确时,控制器将我带到视图登录并在那里我的变量的类型是字符串,请帮忙!我的英语很差,希望你能理解我。祝福。

【问题讨论】:

    标签: javascript node.js session-variables sails.js


    【解决方案1】:

    如果我理解正确,您遇到的问题是在显示您的索引页之前没有运行 variables 策略,因此视图中没有 mensaje 变量。解决这个问题的最简单方法是使用控制器来显示视图,而不是直接路由到视图。所以,在/config/routes.js,而不是:

    '/': {view: 'homepage'}
    

    或任何你有的,做:

    '/': 'HomeController.index'
    

    在/api/controllers/HomeController.js:

    index: function (req, res) {
       res.view('homepage.ejs');
    }
    

    更改控制器和视图名称以适合您的项目。关键是通过使用控制器动作来显示视图,可以确保策略在视图显示之前运行。

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多