【问题标题】:How to wait for a function to finish and then call this.next() in onBeforeAction?如何等待函数完成然后在 onBeforeAction 中调用 this.next()?
【发布时间】: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() 会抛出异常。

我尝试过的:

  1. 编写一个处理程序来告诉 onBeforeAction 等到验证完成后再继续,但是我上一个问题的答案给了我一个无限循环,我不知道如何解决它。

  2. 创建会话变量 tokenValidated,在 clientStart 上运行验证。并在成功回调中将其设置为 true。并在 onBeforeAction 中检查这个变量。

这个解决方案的问题是当你尝试刷新页面时它不起作用,原因与验证之前完成 onBeforeAction 的原因相同。

  1. 直接在验证成功回调中调用onBeforeAction。

登录后有效,但首次访问时站点不受保护。

  1. 直接这样等待Session变量tokenValidated

    this.wait(Meteor.subscribe('token', Session.get('tokenValidated')));

然后检查它是否准备好了

if (this.ready()) // proceed

而且它似乎也不起作用。

身份验证令牌由以下命令存储:

Session.setPersistent('authToken');

这样它就存储在localStorage中。我试图实现的行为是:

  1. 每当新会话开始时,验证此 authToken,并为其设置状态 True/Fasle。

  2. 在 onBeforeAction 中检查此状态并进行相应操作。

  3. 此状态需要在 BEFORE onBeforeAction 之前准备好。

我的问题是验证调用了服务器方法并且需要时间来返回状态,我找不到方法告诉 onBeforeAction 等待验证。

【问题讨论】:

    标签: javascript meteor iron-router


    【解决方案1】:

    这是我解决这个问题的方法。

    我没有在 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');
            }
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 2021-11-13
      • 2020-11-07
      • 2016-01-31
      相关资源
      最近更新 更多