无法在中间件策略中更新req.user?

时间:2017-09-19 18:24:09

标签: javascript node.js sails.js passport.js

我正在sails js上构建应用程序,并尝试在策略中间件中设置本地值。我无法这样做,请帮忙。

这不起作用

    var perms = {"view":true,"add":true,"edit":false};
    // My req.user comes after deserialize (working well)
    req.user.perms = perms;
    res.locals.user = req.user;

以下代码在哪里工作

    var perms = {"view":true,"add":true,"edit":false};
    res.locals.user = req.user;
    res.locals.user.perms = perms;

我正在尝试访问句柄模板中的{{user.perms}}

我想我在第一段代码中做了一些概念错误的事情,请帮忙。

1 个答案:

答案 0 :(得分:1)

我能够找到问题。

执行user后,护照反序列化中设置User.find(),因此req.user被设置为MongoDB文档,因为User模型没有权限属性,我无法设置值。

答案是在发送回调之前将MongoDB Document转换为普通的JSON对象。

passport.deserializeUser(function (userSession, done) {

    User.findOne({"_id":userSession._id},function(err, user){

        done(err, user.toObject())
    })

}

现在可行了

req.user.perms = perms;
res.locals.user = req.user;