Meteor{{#if currentUser}}没有按预期运行

Meteor {{#if currentUser}} not behaving as expected

本文关键字:运行 #if currentUser Meteor      更新时间:2023-09-26

我有一块代码包在一个流星{{#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页面时,它们总是重定向到登录页面,即使当前用户已经登录。是什么原因导致了这种情况?感谢您的帮助。非常感谢。

就像David Weldon说的那样,你可以使用iron:router。更具体地说是例如CCD_ 1。

像这样创建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();
   }
}

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

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

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