我正在关注发现流星书,并且在本章的一篇章节中,我教会我使用Meteor.logginIn()
方法。
目标是简单,有一个新帖子的提交页面,如果没有用户登录,它应该显示访问被拒绝模板,否则它应该显示帖子提交模板。但是如果用户处于登录状态或处于等待状态,则应显示加载模板。我按照教程进行了操作,代码与本书完全相同。但是,当用户登录时,它正确地显示提交页面,当用户注销时,它应显示访问被拒绝页面,而是显示加载模板,同时显示加载模板,如果我登录,则它还显示提交页面。唯一的麻烦是它应该显示访问被拒绝,它显示加载模板。
这是路由代码
Router.route('/submit', {name: 'postSubmit'});
var requireLogin = function(){
if(!Meteor.user()){
if(Meteor.logginIn()){
this.render(this.loadingTemplate);
}else{
this.render('accessDenied');
}
}else {
this.next();
}
}
Router.onBeforeAction('dataNotFound', {only:'postPage'});
Router.onBeforeAction(requireLogin, {only:'postSubmit'});
答案 0 :(得分:2)
呃,那段代码可以使用一些帮助。就像这个例子一样,我们将分开关注点并在不同的钩子中调用它们
首先,请记住,每次调用onBeforeAction
时,它都会将该函数添加到数组并按顺序调用。虽然实际上不依赖于连续顺序总是一个好习惯,但要记住这一点很好。
var userLoggingIn = function() {
if(Meteor.loggingIn()) {
this.render(this.loadingTemplate);
} else {
this.next(); // Done logging in? You may pass.
}
}
var requireLogin = function() {
if(!Meteor.user()) {
this.render('accessDenied');
} else {
this.next(); // User is logged in. I'll allow it.
}
}
// finally, use it.
Router.onBeforeAction([userLoggingIn, requireLogin], {only: 'postSubmit'});
Router.onBeforeAction('loading'); // built-in hook, just like dataNotFound. use in Routes with subscriptions.
Router.onBeforeAction('dataNotFound', {only:'postPage'});
那不是更好,更易于管理吗?我不确定它将要执行哪个命令,因为我正在旅行,只是在机场输入这个...但你可以尝试交换钩子顺序,如果它没有相应的行为。