流星与流量路由器:我有权访问流星.用户从流量路由器触发

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

本文关键字:流星 流量 路由器 用户 访问      更新时间:2023-09-26

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

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

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

我找到了Satya van He-men的一篇文章,Meteor:使用流路由器进行身份验证和权限
在本文中,他使用路由组和触发器按权限"筛选"路由
但在这篇文章中,他使用FlowRouter对象的triggersEnter:函数内的Meteor.loggingIn()Meteor.userId()Meteor.user()Roles.userIsInRole()


triggersEnter执行期间,这些函数中的任何一个是否可能被未定义
使用它们安全吗
我喜欢文章中的模式,但希望确保使用是安全的(或者只需少量更改就可以变得安全)

我认为你担心的原因是合理的——这可能是因为triggersEnter只打过一次电话——我建议阅读关于Auth Logic Permission的官方教程,它是模板级别的,而且是被动的。

以前,我们在路由器层(特别是Iron路由器)。然而,这不是一个好的设计,我们不推荐它

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

我还注意到Roles.userIsInRole()以及其他与安全相关的函数可以在triggerEnter函数中返回undefined。由于我也注意到你提到的文章使用它们没有问题,这让我进行了调查。

据我所知,这就是为什么:如果你使用容器,在加载字段中的任何模板之前,你需要确保用户当前没有登录到这个级别(从而触发没有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