铁路由器onBeforeAction由Meteor.loginWithPassword触发并销毁模板?

时间:2015-08-11 21:23:06

标签: meteor iron-router

我的所有路线都有一个典型的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

0 个答案:

没有答案