我使用Iron路由器的const int a = 12;
const int b = 24;
cout << max(a, b) << endl;
方法检查用户是否登录了除注册和登录路由之外的所有路由:
onBeforeAction
(仅供参考,登录过程在登录模板/ js中this code进行)
这很有效,除了当我登录时,登录模板会在被实际模板替换之前快速显示。
当我检查发生了什么时,我发现在铁路由器之前Router.onBeforeAction(function() {
if (!Meteor.user()) {
this.render('login');
}
else {
this.next();
}
}, {except: ['login', 'register']});
尚未就绪。因此,登录页面显示为用户未被记录。然后(因为Meteor.user()
是被动的),当Meteor.user()
准备就绪时,路线将再次运行,显示正确的模板。
如何使上面的代码示例正常工作?(含义:由于Meteor.user()
未显示登录模板尚未准备好)
我在Stack Overflow上也发现我可以使用fast-render package,但我不愿意破解渲染过程。 Meteor.user()
方法也没有解决此问题。
我也在某个地方读过我可以使用onRun()
Router.configure
选项但我唯一的例子就是我还没有订阅(我使用不安全的自动发布包进行原型设计)。
答案 0 :(得分:0)
我不认为这是最好的解决方案,但这个技巧很好用:
Router.onBeforeAction(function() {
if (Meteor.user() !== undefined) {
if (!Meteor.user()) {
this.render('login');
}
else {
this.next();
}
}
else {
this.pause();
}
}, {except: ['login', 'register']});
此代码示例有效,因为Meteor.user()
在准备就绪之前未定义,如果它已准备好但没有用户登录,则 null 。
对于我的项目,我甚至在加载屏幕上替换了this.pause()
:
Router.onBeforeAction(function() {
if (Meteor.user() !== undefined) {
if (!Meteor.user()) {
this.render('login');
}
else {
this.next();
}
}
else {
this.render('loading');
}
}, {except: ['login', 'register']});
我希望这会对别人有所帮助。