我相信从安全角度,最好在2个地方处理对受限制网址的访问:
getCodecByClassName
支持第一种方式,但我想使用Iron-Router
。
我在Flow-Router
,Meteor: Using Flow Router for authentication and permissions发现了一篇文章
在本文中,他使用路由组和触发器按权限“过滤”路由
但在他正在使用的这篇文章中
Satya van He-men
对象的Meteor.loggingIn()
函数内的Meteor.userId()
,Meteor.user()
,Roles.userIsInRole()
和triggersEnter:
。
在 FlowRouter
执行期间,这些功能是否可能未定义?
使用它们是否安全?
我喜欢文章中的模式,但是想确保使用它是安全的(或者只需很少的更改即可变得安全)
答案 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