伙计们,我正在取得进展,但我确信有更好,更优雅的方式来实现这一功能。和以前一样,我希望用户在登录应用程序后“始终”被定向到欢迎页面,即使他们之前已在其他页面注销过。让我兴奋的是铁路由器onBeforeAction的“this.next()”要求。
简要介绍一个场景:
1)用户导航到该应用程序,并显示“欢迎但请登录/注册”页面。
2)用户登录,路由器将用户引导至“欢迎使用应用程序”页面
3)用户浏览应用程序到“pageOne”,然后决定退出,并再次显示正在呈现的“欢迎但请登录/注册”页面。 (但是,网址仍然显示为http://xxx.xxx.xxx.xxx/pageOne)
4)用户再次登录,现在应用程序不应该呈现“pageOne”页面,这是this.next()的行为,而是显示“欢迎使用应用程序”页面。
我能够使用以下代码获得此功能:
Router.configure({
layoutTemplate: 'layout',
});
Router.route('/', {name: 'welcome'});
Router.route('/pageOne', {name: 'pageOne'});
Router.route('/pageTwo', {name: 'pageTwo'});
var requireLogin = function() {
if (! Meteor.user()) {
if (Meteor.loggingIn()) {
Router.go('welcome');
} else {
this.render('welcomeButLogin');
}
} else {
this.next();
}
}
Router.onBeforeAction(requireLogin, {except: ['blah']});
这样可行,但我收到一条警告信息:
Route dispatch never rendered. Did you forget to call this.next() in an onBeforeAction?
感谢您抽出宝贵时间,我们非常感谢任何反馈。
基因
答案 0 :(得分:0)
问题解决了。
我改变了:
Router.onBeforeAction(requireLogin, {except: ['blah']});
为:
Router.onBeforeAction(requireLogin);
每个建议的代码由solarc在流星论坛上(感谢solarc)。我不太明白这是如何改变路由特定行为的,因为我解释说“{except”['blah']}“将意味着所有路由,因为我没有”blah“路由。我会进一步调查,但是现在它按预期工作,我没有得到警告信息。
谢谢!