FlowRouter,路由时如何获取数据取决于订阅

时间:2017-02-03 12:11:41

标签: meteor meteor-blaze flow-router

我正在为我的应用程序编写许可证验证部分,并且当且仅当他们的许可证已过期时,才想将用户重定向到续订页面。

我正在使用FlowRouter和Blaze。

我所有经过身份验证的路线都在一个组中:

let authenticated = FlowRouter.group({
  triggersEnter: [checkAuthenticated, checkSubscription]
});

然后我检查订阅是否有效:

const checkSubscription = function(context){
  let path = FlowRouter.current().path;
  if (!Meteor.userId()){
    return;
  }
  const sub = new Subscription();
  if (sub.isInvalid() && path !=="/manage-practice/subscription"){
    FlowRouter.go("/manage-practice/subscription");
  }
};

我的类订阅使用我只能在用户登录后加载的集合。我的问题是路由器通常在加载此数据之前触发此重定向。

有没有最佳实践方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用触发器重定向

我不确定这是“最佳做法”,但一种方法是在登录事件中使用Flow Router redirect功能。

您可以在以下位置查看示例:https://atmospherejs.com/kadira/flow-router#redirecting-with-triggershttps://github.com/meteor-useraccounts/flow-routing

在评估用户的集合时,初始登录路径(使用Accounts.onLogin();)可以是通用的“loading ...”模板。在回调中,您可以使用自定义重定向功能重定向到应用中的请求页面,或将用户重定向到“/ manage-practice / subscription”路径。

<强> FlowRouter.wait()

我必须承认我之前并不熟悉第二个选项,但我刚遇到FlowRouter.wait()。这可以用于延迟默认路由过程,直到完成其他一些评估。我怀疑这可能仅在用户直接登录到authenticated路由组中的页面时才有意义。

文档:https://atmospherejs.com/kadira/flow-router#flowrouter-wait-and-flowrouter-initialize