【问题标题】:FlowRouter, how to get data when routing depends on subscriptionFlowRouter,路由依赖订阅时如何获取数据
【发布时间】:2017-06-20 19:29:16
【问题描述】:

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

我正在使用 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");
  }
};

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

是否有解决此问题的最佳实践方法?

【问题讨论】:

  • 您在使用 AccountsTemplates 吗?我整理了一个带有 AccountsTemplates 和 alanning:roles 的解决方案,它在执行任何路由之前等待角色。这很丑陋,但它有效。

标签: meteor meteor-blaze flow-router


【解决方案1】:

使用触发器重定向

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

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

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

FlowRouter.wait()

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

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

【讨论】:

  • 嗨,大卫,我之前已经看过这两个选项,你就对了。 FlowRouter.wait() 不适合。我已经在使用触发器,但我的 Subscription 类过去需要加载用户实践的订阅,然后才能评估它是否是合法订阅。而不是通用重定向页面,我正在尝试使用仅服务器的方法来获取订阅之外的实践,这太慢而无法加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2020-10-17
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多