我有一个代码块包裹在一个meteor {{#if currentUser}} block 中,如下所示:
<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 来实现此目的。更具体地说,例如 Router.onBeforeAction
。
像这样创建函数和钩子(Hook)。
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();
}
}
因此,您可以删除模板助手并在路由器逻辑上执行此操作。
关于javascript - Meteor {{#if currentUser}} 的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424842/