2017-02-03 9 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

리디렉션 트리거

와 함께 나는이되는 '모범 사례'에 대한 모르겠지만 한 가지 방법은 로그인 이벤트 흐름 라우터 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