Meteor.user()登录问题

时间:2014-11-27 05:31:51

标签: meteor iron-router

我正在使用路由器代码

测试限制登录功能
var requireLogin = function() { 
  if (! Meteor.user()) {
   console.log("user not logged");
   this.next()
 } else {
   console.log("user logged");
   this.next()
 }
}

Router.onBeforeAction(requireLogin, {except: ['home','login','about']});

当我尝试进入userprofile等限制区域时,它要求我登录并打印"user not logged" 在我成功登录并尝试再次访问该区域之后。它打印的代码都以"user not logged"开头,然后是"user logged"

我想知道如何避免这种情况发生?因为有些页面在发生这种情况时会发生故障。

如果我进入限制区域页面,我希望它只打印"user logged"

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您需要在Meteor.loggingIn()函数中的某处集成requireLogin。因为,正在发生的事情是Meteor仍在加载用户系统,并且对于每次路由更改,它会根据当前会话(如果存在)重新验证用户。

var requireLogin = function() { 
    if(!Meteor.user()){
        if(Meteor.loggingIn()){
            this.render(this.loadingTemplate);
        }else{
            this.render('accessDenied');
        }
    }else {
        this.next();
    }
}

您会注意到它使用了this.loadingTemplate。要保持这一点,您还必须配置路由以具有加载模板。 e.g:

Router.configure({
  loadingTemplate: 'loading'
});

或者你可以简单地将其与this.render('loading');交换出来,其中'loading'是您的'现在加载'的模板名称。产量/页。