javascript - 无法更新中间件策略中的 req.user?

标签 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;

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

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

最佳答案

我能够找到问题。

执行User.find()后,user在passport deserialize中被设置,因此req.user被设置为MongoDB 文档,并且由于 User 模型没有 perms 属性,因此我无法设置该值。

答案是在发送到回调之前将 MongoDB 文档转换为纯 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;

关于javascript - 无法更新中间件策略中的 req.user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46307380/

相关文章:

model - 风 sails JS : enhance model before sending response

angularjs - nodejs + multer + angularjs 无需重定向即可上传

javascript - NodeJs : Wait for ForEach function

javascript - parseInt 不起作用

javascript - 带有 Bootstrap 模式的 Angular js - 重新单击事件无法正确触发

javascript - onBeforeUnload 没有被 headless 浏览器触发

javascript - SailsJS : Requiring Assets, 例如 sails.io.js

swift - 如何从 View Controller 中触发异步请求

javascript - 有没有更好的方法在一个 html 页面上多次运行 JavaScript?

javascript - Ruby on Rails 实时事件通知