在 meanjs 中将用户传递给浏览器

passing user to the browser in meanjs

我正在阅读 meanjs 项目的源代码以更好地学习 javascript 和 MEAN。有一个表达式:

    <!--Embedding The User Object-->
    <script type="text/javascript">
        var user = {{ user | json | safe }};
    </script>

我知道它将用户记录作为 json 对象发送到浏览器,但在 google 上找不到 'safe' 过滤器。谁能给我指出正确的方向或解释一下这是什么?

是的,用户对象实际上被传递到浏览器,并且它实际显示在源代码中。实际上,我部署的应用程序在源代码中有这个(实际数据一般化):

<!--Embedding The User Object-->
<script type="text/javascript">
    var user = {"_id":"123abc456xyzetc","displayName":"First Last","provider":"local","username":"newguy","__v":0,"roles":["admin"],"email":"my@email.com","lastName":"Last","firstName":"First"};
</script>

如您所见,它实际上将用户信息转储到源代码中,这不是开发应用程序的最安全方式。如果您在 layout.server.view.html 文件 (var user = {{ user | json | safe }};) 中注释掉或删除该行,那么您将无法真正登录。它会让您登录,然后立即将您踢出。

不过,您会注意到,在您的 config > passport.js 文件中,从第 14 行左右开始,一些信息在传回浏览器之前被删除:

// Deserialize sessions
passport.deserializeUser(function(id, done) {
    User.findOne({
        _id: id
    // The following line is removing sensitive data. In theory, you could remove other data using this same line.
    }, '-salt -password -updated -created', function(err, user) {
        done(err, user);
    });
});

不过,如果您决定删除其他字段,请注意这可能会破坏您的应用程序。例如,我删除了用户 ID,我的大部分应用程序都可以运行,但它破坏了一些特定的功能(如果我没记错的话,我相信是文章)。