Iron:路由器登陆页面登录后

时间:2015-03-10 20:09:30

标签: meteor iron-router

伙计们,我正在取得进展,但我确信有更好,更优雅的方式来实现这一功能。和以前一样,我希望用户在登录应用程序后“始终”被定向到欢迎页面,即使他们之前已在其他页面注销过。让我兴奋的是铁路由器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?

感谢您抽出宝贵时间,我们非常感谢任何反馈。

基因

1 个答案:

答案 0 :(得分:0)

问题解决了。

我改变了:

Router.onBeforeAction(requireLogin, {except: ['blah']});

为:

Router.onBeforeAction(requireLogin);

每个建议的代码由solarc在流星论坛上(感谢solarc)。我不太明白这是如何改变路由特定行为的,因为我解释说“{except”['blah']}“将意味着所有路由,因为我没有”blah“路由。我会进一步调查,但是现在它按预期工作,我没有得到警告信息。

谢谢!