带流量路由器的流星:我可以从流量路由器触发器中访问 Meteor.User 吗?

meteor with flow-router: Do I have access to Meteor.User from within a flow-router trigger?

我认为从安全角度,最好在两个地方处理对受限URL的访问:

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

我找到了 Satya van He-menMeteor: Using Flow Router for authentication and permissions
的文章 在本文中,他使用路由组和触发器按权限 "filter" 路由。
但是在这篇文章中他使用的是 Meteor.loggingIn()Meteor.userId()Meteor.user()Roles.userIsInRole() FlowRouter 对象的 triggersEnter: 函数中。


triggersEnter 执行期间,这些函数中是否有可能 未定义
使用它们安全吗?
我喜欢文章中的模式,但想确保它可以安全使用(或者只需稍作改动就可以变得安全)

我认为您的担忧是有道理的,这可能是因为 triggersEnter 只调用了一次我建议阅读有关模板级别的 Auth Logic Permission 的官方教程,它是反应式的。

Previously, we did this in the router layer (specifically with Iron Router). However, that's not a good design and we don't recommend it.

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

我还注意到 Roles.userIsInRole() 以及其他与安全相关的函数可以 return undefinedtriggerEnter 函数中。由于我还注意到 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