0

我正在尝试使用 Meteor 创建一个管理面板。我不想将任何与管理面板相关的 js 和 html 文件加载给普通用户。仅在用户登录时才需要加载它们。我该如何实现呢?(我使用 FlowRouter 来管理路线)

4

2 回答 2

1

首先,让我们关心何时实际加载文件。Meteor.user()是我们可以在Tracker 计算中使用的响应式数据源:

Tracker.autorun(() => {
  if(Meteor.user()) {
    loadUserFiles()
  }
})

您可以通过 HTTP 调用、DOM、jQuery、您自己的 DDP 魔法来加载这些文件……
如何加载它们是一个相当广泛的问题。只需确保在服务器端检查请求者是登录用户即可。

现在,根据您的用例,您可能希望以这种方式加载两种不同类别的文件:

基本资源文件

这些包括您想要摆弄并附加到 DOM 的 CSS、图像、HTML、JS、视频或音乐 (...) 文件。您执行此操作的方式类似于任何其他资源请求,已经存在大量资源可以很好地与 jQuery/Node 请求组合一起完成,并且您无需更改任何内容即可使其在 Meteor 中工作。
如果您使用 HTML 请求,您可能需要与WebApp.rawConnectHandlers服务器端用户一起检查。

HTML 模板文件

这更棘手。没有办法阻止客户访问他收到的模板。因为模板是在服务器端编译并作为 JavaScript 代码发送的,所以要实现向部分用户发送模板,您需要更改 Meteor 构建文件的方式(或者可能使用精心制作的包)以便能够单独加载模板。
但是,我认为这不是正确的方法。模板只是显示数据的一种方式。如果您控制将数据发送给谁,那么如果已注销的用户访问受保护的模板,他只会看到错误和空格。

请注意,模板帮助程序文件属于“基本资源”类别,因此以这种方式加载一些额外的帮助程序是有意义的。您将使已注销的客户端免受死代码的影响。

于 2015-11-09T09:37:40.350 回答
0

使用全局助手

Template.registerHelper('isLoged', function () {return Meteor.userId() != null});

if(isLoged()) {// yes login user} else { //redirect }
于 2015-11-09T01:15:29.047 回答