我的所有路线都有一个典型的onBeforeAction
需要登录,然后将用户转发到他们要求的路线。它看起来像这样:
if(!Meteor.user()) {
if(Meteor.loggingIn())
this.render(this.loadingTemplate);
else
this.render('loginPage');
}
else
this.next();
问题是当我的登录页面尝试使用Meteor.loginWithPassword(email, password)
登录用户并且登录失败时。失败后,我会在登录页面上显示错误消息。但是Meteor.loginWithPassword(email, password)
实际上会触发onBeforeAction
再次运行。 onBeforeAction
重新运行并重新调用this.render('loginPage')
并重新呈现loginPage
并销毁我的错误消息并再次显示干净的登录页面而不显示错误消息 - 从而使用户感到困惑。
我实际上尝试通过在Session
渲染时设置loginPage
变量来解决此问题,但是如果我将onBeforeAction
更改为:
if(!Meteor.user()) {
if(Meteor.loggingIn())
this.render(this.loadingTemplate);
else {
if(Session.get('onLoginPage') != true)
this.render('loginPage');
}
}
else
this.next();
然后,Meteor.loginWithPassword(email, password)
被调用后模板变为空白并失败。如果登录有效,那么当用户转发到他们请求的路由时没有问题,但是如果失败则执行此操作。
Meteor和Meteor.loginWithPassword(email, password)
方法正在破坏模板并再次触发onBeforeAction
。我在客户端登录按钮的click
事件中调用它,但这应该没问题。
我知道我的loginPage
路由有效,错误处理也是如此,因为如果我直接转到loginPage
路由(没有onBeforeAction
,则只有默认action
)一切正常,包括错误处理。
使用Meteor 1.1.0.3和Iron Router 1.0.9