Iron Router OnBefore Hook with Params URL 不调用函数

Iron Router OnBefore Hook with Params URL Not Calling Function

我想使用 iron router 来限制对页面的访问,但是 before 函数似乎不是 运行。

# 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']

您必须小心考虑用户何时登录、未登录以及他们何时登录

以下是我放置在 onBeforeAction 挂钩中的 requireLogin 函数的代码。

如果没有 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']});

事实证明,对于带有“/”的路由,您需要使用“.”。

所以在这种情况下我使用了:

only: ["challenge.:_id"]

问题已解决!