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

时间:2015-02-23 03:05:44

标签: angularjs filter meanjs

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

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

据我所知,它将用户记录作为json对象发送到浏览器,但无法在google上找到“安全”过滤器。有谁能请我指出正确的方向或解释这是什么?

1 个答案:

答案 0 :(得分:1)

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

<!--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,并且我的大多数应用都工作了,但它打破了一些特定的功能(我相信这是文章,如果我没记错的话)。