METEOR铁路由器不应该重定向

时间:2015-07-19 18:02:38

标签: javascript meteor

我有这个onBeforeAction钩子,我在其中检查用户是否未登录或不是特定角色(在这种情况下是雇主角色),然后我将它们重定向到特定页面(称为验证)。我在导航到该页面时工作得很好但是当我已经在页面上并点击REFRESH时,看起来他已经过了IF条件并继续Router.go("verification");

代码:

Router.route("/employer/profile", {
  name:"employerProfile",
  template:"employerProfile",
  layoutTemplate:'employerLayout',

    onBeforeAction:function(){

        var user = Meteor.userId();
        if(!user || !Roles.userIsInRole(user, ['employer'])) { // checking if the user satisfies this condition e.g. if its a "GUEST USER" than he can't access this route
              Router.go("verification");
        }
        else {
          this.next();
        }
        return true;

    },


});

这是一个快速的视频演示,展示了发生的事情:

http://screencast.com/t/BEgwpXwqvwt

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

看起来在页面刷新Meteor订阅Roles集合,但尚未下载任何数据,因此userIsInRole返回false。

我认为您需要等到Roles订阅准备好(并且它不是最佳选项)或稍后重定向到验证页面,此时订阅将准备就绪。我建议使用服务器方法进行此检查。将验证码移到服务器方法中并使用它:Meteor.call('verifyUser',function(error,result){if(result === false)Router.go(“verification”);});