【问题标题】:passing user to the browser in meanjs在meanjs中将用户传递给浏览器
【发布时间】:2015-06-03 04:38:05
【问题描述】:

我正在阅读 meanjs 项目的源代码以更好地学习 javascript 和 MEAN。有一种说法:

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

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

【问题讨论】:

    标签: angularjs filter meanjs


    【解决方案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 &gt; 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,我的大部分应用程序都可以正常工作,但它破坏了一些特定功能(如果我没记错的话,我相信是文章)。

    【讨论】:

    • 感谢您的信息,我尝试接受解决方案,但它说我需要分钟。 15 票,对不起!
    • @AdrianDain 我刚刚赞成你的问题(这是一个非常有效的问题,毕竟......我应该已经这样做了)。现在你应该有足够的了。 :) 很高兴我能帮上忙。
    • 哇!非常感谢!你不仅让我完全弄清楚了我的问题,而且让我终于能够感谢我从人们那里得到的帮助! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多