我正在为我的应用程序编写许可证验证部分,并且当且仅当他们的许可证已过期时,才想将用户重定向到续订页面。
我正在使用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");
}
};
我的类订阅使用我只能在用户登录后加载的集合。我的问题是路由器通常在加载此数据之前触发此重定向。
有没有最佳实践方法来解决这个问题?
答案 0 :(得分:0)
使用触发器重定向
我不确定这是“最佳做法”,但一种方法是在登录事件中使用Flow Router redirect
功能。
您可以在以下位置查看示例:https://atmospherejs.com/kadira/flow-router#redirecting-with-triggers和https://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