我希望使用铁路由器限制对页面的访问,但是之前的功能似乎没有运行。
# Limit which challenges can seen to members.
isMemberHook = () ->
challenge = Challenges.findOne _id: @params._id
if Meteor.userId() in challenge.members
@next()
else
@redirect '/'
Router.onBeforeAction isMemberHook,
only: ['/challenge/:_id']
答案 0 :(得分:3)
事实证明,对于带有“/”的路线,您需要使用“。”。
所以在这种情况下我使用了:
only: ["challenge.:_id"]
问题解决了!
答案 1 :(得分:0)
您必须小心考虑用户何时登录,未登录以及何时登录。
以下是我放在requireLogin
挂钩中的onBeforeAction
函数的代码。
如果没有Meteor用户,请检查他们是否正在登录,如果是,则渲染加载模板。
var requireLogin = function() {
if (! Meteor.user()) {
if (Meteor.loggingIn()) {
this.render(this.loadingTemplate);
} else {
this.render('AdminLogin');
}
} else {
this.next();
}
};
Router.onBeforeAction(requireLogin, {only: ['AdminMain', 'postSubmit', 'appointmentsList', 'AppointmentShow']});
修改强>
好的,这就是发生的事情:
https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#applying-hooks-to-specific-routes
文档中不完全清楚的是数组在onBeforeAction
Router.onBeforeAction(requireLogin, {only: ['routeName', 'anotherRouteName']});
这是一组与钩子一起使用的路线:
this.route('/order', {
template: 'order',
name: 'order',
layoutTemplate: 'layout'
});
this.route('/order/:_id', {
template: 'order',
name: 'orderEdit',
layoutTemplate: 'layout',
data: function(){
var id = this.params._id;
alert(id);
}
});
var beforeHook = function(){
console.log("beforeHook run!");
alert("safsf");
};
Router.onBeforeAction(beforeHook, {only: ['orderEdit']});