meteor with flow-router:我是否可以通过流量路由器触发器访问Meteor.User?

问题描述:

我认为,从安全角度来看,这是最好的处理在2个地方访问受限制的URL:meteor with flow-router:我是否可以通过流量路由器触发器访问Meteor.User?

  • 路由级别:确保没有人将能够得到这是一个路线不允许使用
  • 模板级别:在验证权限之前不会显示受限制的数据。

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

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


是否有可能,任何这些功能将是triggersEnter执行期间不确定
使用它们是否安全?
我想从文章的格局,但要确保它是安全的使用(或可以用一些变化成为安全)

我觉得你值得关注的理由是有效的它是可能的,因为所谓的只有一次我triggersEnter建议阅读关于模板级Auth逻辑权限的官方教程,它是被动的。

以前,我们是在路由器层(具体是使用Iron 路由器)完成的。但是,这不是一个好的设计,我们不推荐它。

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

+0

感谢@马克,我去了次粗糙的文件之前,但希望有一个安全的方式来做它在路由器层面。 这是因为从安全角度来看,最好停止用户之前,而不是内部... – Izack

+0

@lzack是啊但问题是我们没有服务器端渲染这可能会改变我们在路由级别上进行身份验证的方式,但这其实很安全!即使您绕过模板级别检查,您所做的唯一事情就是更改UI。如果您在'发布'功能上正确地进行安全检查,用户将永远不会被未经授权的访问,所以如果没有数据,任何内容都不会公开:) –

+0

再次感谢。我知道我可以(也应该)在数据级别和模板级别上确保安全。但是添加路由级别可以改善它(它可以隐藏“安全”URL,并且在我们在其他任何级别有“bug”的情况下成为第一线防御) 正如一个想法:如果我将调用routing.js文件' main.routes.js',不会在其他对象已经存在后加载吗? – Izack

我也注意到,Roles.userIsInRole()以及其他安全相关的功能可以在triggerEnter函数返回undefined。由于我也注意到,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