2017-02-03 2 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? Я собрал решение w/AccountsTemplates и alanning: роли, которые ждут роли перед выполнением любой маршрутизации. это уродливо, но это работает. – zim

ответ

0

Перенаправление с триггерами

Я не уверен в этом быть «лучшей практики», но один подход заключается в использовании функции Flow Router redirect на вашем случае входа в систему.

Примеры: https://atmospherejs.com/kadira/flow-router#redirecting-with-triggers и https://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

Смежные вопросы