流星与流量路由器:我有权访问流星.用户从流量路由器触发
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-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
- 如何使用铁流星与流星的默认路线
- 在流星上使用微信js-sdk时出现拒绝权限错误
- 流星中DOM的繁殖
- 节点协同与生成器和Promise并行流量控制
- 保存串行端口列表与流星
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- 流路由器流星的历史
- 动态路径用于流星/铁路由器
- 流星的全球可变范围
- 流星收集更新不是在更新文档
- 在流星中react不工作的defaultValue
- 剑道UI不与流星合作
- 将HTML5模板转换为流星.js,关于js init的问题
- 流星:点击激活其他模板
- 使用流星调用时,可以多次访问流星中的某个函数
- 流星蒙戈的返回阵列
- 如何处理流星变量&对miniMongo有问题
- 流星JS:铁路由器点击按钮
- 流星与流量路由器:我有权访问流星.用户从流量路由器触发
- 如何查看流星DDP流量