我可以避免将所有 js 提供给未登录的客户端吗?

Can I avoid serving all js to clients not logged in?

本文关键字:登录 客户端 可以避免 js      更新时间:2023-09-26

在构建 Meteor 应用程序时,是否可以不将所有生成的 javascript 提供给/加载到客户端,直到用户进行身份验证?

如果没有人能看到我的模板、模型、助手等,我会更高兴......

澄清:
这不是关于将内容放在/server下,或者对pub/sub做正确的事情。
这是关于不向未经身份验证的用户发送不必要的内容,不是因为它存在安全风险,而只是为了尽可能多地向世界隐藏。

我一直在使用路由器包来完成此操作。

在主 html 文件中,添加{{renderPage}}您希望路由器呈现模板的位置。然后,在定义路由时,可以根据路径和任何其他变量指定要呈现的模板。

例如,如果要在不呈现任何受保护模板的情况下显示登录屏幕,则可以执行以下操作:

Meteor.Router.page();
Meteor.Router.add({
  '/': function() {                                                                                                                                                                                                 
    if (Meteor.userId()) {
      return 'protectedContentTemplate';
    }   
    else {
      return 'userUnauthorizedTemplate';
    }   
  },  
});

当然,您应该始终使用Meteor.publish()Collection.allow()功能锁定您的集合,以便未经授权的用户无法访问他们也不应该访问的信息。

我很

确定目前不可能有选择地在 Meteor 应用程序中加载脚本。一个例外是,您可以通过将任何敏感代码放在/server目录中(不会发送到客户端(来保护它,并按照 Coffey 建议@Patrick锁定数据(也使用 Meteor method s(。如果这样做,则不必向客户端透露完整的模型架构、身份验证规则或敏感算法,并且可以严格控制哪些记录甚至记录字段对客户端可见。它运行良好,您可以通过使 API 的开放程度来选择所需的便利性/性能级别与安全性级别。

如果你的模板和帮助程序很敏感,你必须等到引入服务器端渲染(它在路线图上(,或者在没有 Meteor 帮助的情况下制定自己的解决方案,但我认为可能有理由更深入地研究这个问题。您担心的前提似乎是经过身份验证的用户在某种程度上比未经身份验证的用户更值得信赖,但在大多数情况下(即使在公司内部(,也可能存在不可信的用户 - 或者帐户被黑客入侵的用户 - 这些人将始终可以访问您发送到浏览器的任何内容。因此,从这个角度来看,确保无论如何都不会将重要机密放在模板或客户端代码中是有意义的。但是,对于大多数应用程序,模板和帮助程序不会敏感,如果您设置好服务器,被黑的模板将无法访问普通模板无法访问的任何内容。