在我的onBeforeAction方法中,我需要等待函数完成,然后调用this.next()。
Router.onBeforeAction(function () {
var self = this;
functionToWait(function () {
// Success callback
self.next();
});
});
但似乎onBeforeAction在函数之前完成,因此当我调用self.next()时会抛出异常。
我在这里问过类似的问题,但我的问题没有解决。
How to make onBeforeAction call wait until a function call inside finishes in meteor.js?
需要进行的是网站需要身份验证。为此目的,会话中存储了一个令牌。我想要实现的是,只要路由发生变化,就需要验证令牌。我正在尝试在onBeforeAction中进行此验证。来自iron-router的新API说我需要在这个方法中调用this.next()。但问题是onBeforeAction方法完成运行 BEFORE 验证。因此,在验证的成功回调中,调用self.next()将抛出异常。
我尝试过:
写一个处理程序来告诉onBeforeAction等到验证完成然后继续,但我之前的问题的答案给了我一个无限循环,我不知道如何解决它。
创建会话变量tokenValidated,在clientStart上运行验证。并在成功回调中将其设置为true。并在onBeforeAction中检查此变量。
此解决方案的问题在于,当您尝试刷新页面时它不会起作用,原因与在验证之前完成onBeforeAction相同。
这在登录后有效,但首次访问时不受保护。
直接等待会话变量tokenValidated
this.wait(Meteor.subscribe('令牌',Session.get(' tokenValidated')));
并检查它是否已准备好
if (this.ready()) // proceed
它似乎也无法发挥作用。
此命令存储身份验证令牌:
Session.setPersistent('authToken');
因此它存储在localStorage中。我想要实现的行为是:
每当新会话开始时,请验证此authToken,并将其设置为True / Fasle。
在onBeforeAction中检查此状态并继续进行。
此状态需要准备好之前 onBeforeAction。
我的问题是验证调用服务器方法并花费时间返回状态,我找不到告诉onBeforeAction等待验证的方法。
答案 0 :(得分:0)
以下是我解决这个问题的方法。
我没有在onBeforeAction
中验证身份验证令牌,而是在client.js中执行此操作:
Meteor.startup(function () {
// Validate authentication token here
Meteor.call('validateAuthToken', Session.get("authToken"), function (error, result) {
if (!result) {
Router.go('/login');
} else if (!Router.current().route.getName()) {
// Site init from root, token is validated, direct to notepage
Router.go('/notepad');
}
});
});