流媒体与流路由器:我是否可以从流路由器触发器中访问Meteor.User?

时间:2015-11-01 13:15:21

标签: javascript meteor flow-router

我相信从安全角度,最好在2个地方处理对受限制网址的访问:

  • 路由级别:确保没有人能够到达不允许的路由
  • 模板级:验证权限前不会显示受限制的数据。

getCodecByClassName支持第一种方式,但我想使用Iron-Router

我在Flow-RouterMeteor: Using Flow Router for authentication and permissions发现了一篇文章 在本文中,他使用路由组和触发器按权限“过滤”路由 但在他正在使用的这篇文章中 Satya van He-men对象的Meteor.loggingIn() 函数内的Meteor.userId()Meteor.user()Roles.userIsInRole()triggersEnter:

FlowRouter 执行期间,这些功能是否可能未定义使用它们是否安全?
我喜欢文章中的模式,但是想确保使用它是安全的(或者只需很少的更改即可变得安全)

2 个答案:

答案 0 :(得分:1)

我认为您关注的原因是有效的,因为triggersEnter只调用了一次我建议阅读模板级别的Auth Logic Permission上的官方教程并且它是被动的

  

以前,我们在路由器层(特别是Iron)中执行此操作   路由器)。但是,这不是一个好的设计,我们也不推荐它。

https://kadira.io/academy/meteor-routing-guide/content/implementing-auth-logic-and-permissions

答案 1 :(得分:1)

我还注意到Roles.userIsInRole()以及其他与安全相关的函数可以在undefined函数中返回triggerEnter。由于我也注意到the article you mentioned正在使用它们而没有问题,因此它引导我进行调查。

这就是为什么,据我所知:如果你使用容器,你需要确保用户当前没有在此级别登录,然后在字段中加载任何模板(从而触发路由输入函数没有Meteor.userId()

所以你可以在triggerEnter中使用所有与用户权限相关的功能,只要你在容器中做这样的事情,基本上阻止任何模板加载,只要用户登录:

  {{#if authInProcess}}
    <p>loading ...</p>
  {{else}}
    {{> Template.dynamic template=layout}} // load your template
  {{/if}}

有一个看起来像这样的帮手:

authInProcess: function() {
    return Meteor.loggingIn();
  },

请注意,此代码来自:https://kadira.io/academy/meteor-routing-guide/content/implementing-auth-logic-and-permissions