我有一个包含在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页面时,即使当前用户已登录,他们也会始终重定向到登录页面。可能导致此问题的原因是什么?感谢任何帮助。谢谢!
答案 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 }}
。它可能会起作用,但它不是帮助者应该做的。