【发布时间】:2016-05-28 06:49:26
【问题描述】:
在我的 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?
需要做的是网站需要身份验证。并且为此目的在 Session 中存储了一个令牌。我想要实现的是,只要路线发生变化,就需要验证令牌。我正在尝试在 onBeforeAction 中进行此验证。 Iron-router 的新 API 说我需要在这个方法中调用 this.next() 。但问题是 onBeforeAction 方法完成了验证的运行BEFORE。因此在验证的成功回调中,调用 self.next() 会抛出异常。
我尝试过的:
-
编写一个处理程序来告诉 onBeforeAction 等到验证完成后再继续,但是我上一个问题的答案给了我一个无限循环,我不知道如何解决它。
创建会话变量 tokenValidated,在 clientStart 上运行验证。并在成功回调中将其设置为 true。并在 onBeforeAction 中检查这个变量。
这个解决方案的问题是当你尝试刷新页面时它不起作用,原因与验证之前完成 onBeforeAction 的原因相同。
- 直接在验证成功回调中调用onBeforeAction。
登录后有效,但首次访问时站点不受保护。
-
直接这样等待Session变量
tokenValidatedthis.wait(Meteor.subscribe('token', Session.get('tokenValidated')));
然后检查它是否准备好了
if (this.ready()) // proceed
而且它似乎也不起作用。
身份验证令牌由以下命令存储:
Session.setPersistent('authToken');
这样它就存储在localStorage中。我试图实现的行为是:
每当新会话开始时,验证此 authToken,并为其设置状态 True/Fasle。
在 onBeforeAction 中检查此状态并进行相应操作。
此状态需要在 BEFORE onBeforeAction 之前准备好。
我的问题是验证调用了服务器方法并且需要时间来返回状态,我找不到方法告诉 onBeforeAction 等待验证。
【问题讨论】:
标签: javascript meteor iron-router