Meteor {{#if currentUser}}表现不尽如人意

时间:2015-04-03 01:04:33

标签: javascript jquery meteor router iron-router

我有一个包含在meteor {{#if currentUser}}块中的代码块,如下所示:

<template name="setup">
  {{#if currentUser}} {{> step1}} {{else}} {{redirect}} {{/if}}
</template>
<template name="setup2">
  {{#if currentUser}} {{> step2}} {{else}} {{redirect}} {{/if}}
</template>
<template name="step1">
  <div class="fullscreen">
    Setup: Step 1 of 2
    <div class="buttons">
      <a class="btn btn-primary" href="{{pathFor 'setup2'}}">Next</a>
    </div>
  </div>
</template>
<template name="step2">
  <div class="fullscreen">
    Setup: Step 2 of 2
    <div class="buttons">
      <a class="btn btn-primary" href="{{pathFor 'setup'}}">Previous</a>
      <a class="btn btn-primary" href="{{pathFor 'home'}}">Complete</a>
    </div>
  </div>
</template>

和我的javascript中的辅助函数重定向如下:

      //setup redirects
     Template.setup.helpers({
       redirect: function() {
         return Router.go('login');
       }
     });
     Template.setup2.helpers({
       redirect: function() {
         return Router.go('login');
       }
     });

但是,当我访问/ setup或/ setup2页面时,即使当前用户已登录,他们也会始终重定向到登录页面。可能导致此问题的原因是什么?感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:3)

就像David Weldon说你可以使用铁:路由器。更具体的是Router.onBeforeAction例如。

创建te函数和这样的钩子。

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

Router.onBeforeAction(requireLogin, {only: 'setup'});
Router.onBeforeAction(requireLogin, {only: 'setup2'});

data:function(){},就像这样。

data:function(){
  if(!Meteor.userId()){
    this.render('redirect')
   }else{
    this.next();
   }
}

因此,您可以删除模板助手并在路由器逻辑上执行此操作。

答案 1 :(得分:2)

currentUser为空,因为用户正在登录。因此,请在检查当前用户之前检查{{ loggingIn }}。它可能会起作用,但它不是帮助者应该做的。

http://docs.meteor.com/#/full/template_loggingin