3

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

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

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

4

2 回答 2

0

我一直在使用路由器包来完成这个。

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

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

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

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

于 2013-10-08T14:54:10.217 回答
0

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

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

于 2013-10-08T18:00:58.810 回答