2017-02-03 59 views
0

我正在爲我的應用程序編寫一個許可證驗證部分,並且希望將用戶重定向到續訂頁面,當且僅當他們的許可證已過期。FlowRouter,路由時如何獲取數據取決於訂閱

我正在使用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

您使用的是AccountsTemplates嗎?我把一個解決方案放在一起,包括AccountsTemplates和alanning:在做任何路由之前等待角色的角色。這是醜陋的,但它的工作原理。 – zim

回答

0

重定向使用觸發器

我不知道這是「最佳實踐」,但一個方法是在你的登錄事件中使用的流量路由器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