带流量路由器的流星:我可以从流量路由器触发器中访问 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-men
、Meteor: 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 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
我认为从安全角度,最好在两个地方处理对受限URL的访问:
- 路由级别:确保没有人能够到达 不允许的路由
- 模板级别: 在验证权限之前不会显示受限制的数据。
Iron-Router
支持第一种方式,但我想用Flow-Router
。
我找到了 Satya van He-men
、Meteor: 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 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