2017-02-03 5 views
0

私は自分のアプリケーションのライセンス検証部分を作成しており、ライセンスが失効した場合にのみユーザーを更新ページにリダイレクトします。FlowRouter、ルーティング時にデータを取得する方法サブスクリプションに依存

私はFlowRouterとBlazeを使用しています。

すべての私の認証されたルートはグループである:

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"); 
    } 
}; 

私のクラスのサブスクリプション私は一度だけ読み込むことができ、コレクションを使用していますので、は次のようにサブスクリプションが有効であるかどう

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

私はその後チェック私の問題は、このデータがロードされる前にルーターが通常このリダイレクトをトリガーすることです。

これを解決するベストプラクティスアプローチはありますか?

+0

あなたがAccountsTemplatesを使用していますか?私はAccountsTemplatesとalanning:ロールを使用してルーティングを行う前にロールを待つソリューションをまとめました。それは醜いですが、それは動作します。 – zim

答えて

0

リダイレクトが発生し

では、私はこのこと「ベストプラクティス」についてはよく分からないが、1つのアプローチは、ログインイベントにフロールータ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

+0

こんにちはデビッド、私は前に両方のオプションを見てきました。 'FlowRouter.wait()'は適切ではありません。私はすでにトリガーを使用していますが、私の 'Subscription'クラスは、それが合法的なサブスクリプションであるかどうかを評価する前に、ユーザーの実践にサブスクリプションの負荷を要求していました。一般的なリダイレクトページではなく、サブスクリプションの外にある練習をロードするには遅すぎるサーバー専用のメソッドを使用しようとしています。 – Hans

関連する問題