在Meteor中,如何仅为登录用户加载某些文件?

时间:2015-11-07 10:56:01

标签: meteor meteor-blaze flow-router

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

2 个答案:

答案 0 :(得分:1)

首先,让我们来处理实际加载文件的时间。 Meteor.user()是我们可以在Tracker computations中使用的反应式数据源:

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

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

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

基本资源文件

这些包括您想要摆弄并附加到DOM的CSS,图像,HTML,JS,视频或音乐(...)文件。你这样做的方式类似于任何其他资源请求,已经有很多资源可以很好地使用jQuery / Node请求组合,并且你不需要改变任何东西以使它在Meteor中工作。
如果您使用HTML请求,则可能需要使用WebApp.rawConnectHandlers进行服务器端用户检查。

HTML模板文件

这比较棘手。有is no way to prevent a client from accessing templates he has received。因为模板是在服务器端编译并作为JavaScript代码发送的,为了实现向一部分用户发送模板,您需要更改Meteor构建文件的方式(或者使用精心设计的包),以便能够单独加载模板。
但我不认为这是正确的方法。模板只是展示数据的一种方式。如果您控制将数据发送给谁,那么如果注销用户访问受保护的模板,他将只看到错误和空格。

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

答案 1 :(得分:0)

使用全球助手

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

if(isLoged()) {// yes login user} else { //redirect }