2016-09-01 15 views
0

こんにちは、廃止されたng2ルートでは、ユーザーが認証された場合にのみコンポーネントにナビゲートする保護されたアウトレットを使用しました。しかし、新しいルーターでは、保護されたroutes.Everyone app.routing.tsファイルに経路を定義するときにcanActivateガードを使用しています。私は、保護されたアウトレットを持っている私のルート定義において、canActivateルートを定義するのではなく、簡単な方法だと思っています。保護されたルーターアウトレットin new Router-angular2

@Directive({ 
selector: 'protected-router-outlet', 
}) 
export class ProtectedOutlet extends RouterOutlet { 
private parentRouter: Router; 
publicRoutes: any; 
constructor(_viewContainer: ViewContainerRef, _loader: DynamicComponentLoader, _parentRouter: Router, @Attribute('name') nameAttr: string, private auth: AuthService) { 
    super(_viewContainer, _loader, _parentRouter, nameAttr); 

    this.parentRouter = _parentRouter; 
    this.publicRoutes = { 
     '/Login': true 
    }; 
} 
    activate(instruction: ComponentInstruction) { 
    var url = this.parentRouter.lastNavigationAttempt; 
    var LoggedIn = this.auth.IsLoggedIn(); 
    if (!LoggedIn) { 
     this.parentRouter.navigateByUrl('/Login'); 
    } 
    return super.activate(instruction); 
    } 
} 

は、それが可能にはい私が保護コンセントを使用することができますどのように私は、新しいルートでComponentInstructionを見つける傾けるので、新しいRouter.Ifで保護されたコンセントを持つことです。 は、誰かが私が間違っている私をout.If助けてください、すべてのルートのAuthGuardを指定すると、あまりにも面倒であれば、あなたがこれを行うことができます

+0

なぜあなたはCanActivateガードを避けたいですか? – BeetleJuice

+0

私は定義されているすべてのルートについて定義する必要があるからです。私はCanActivateに反対していません。しかし、 'canActivate'を定義するのではなく、保護されたアウトレットを使用するのが簡単だと思いました。私が' canActivate'を言及するのを忘れたとしても、保護されたアウトレットはそう扱います。 –

答えて

2

route.Thankを保護するための適切なアプローチを私に提案してくださいすることができます

const unprotectedRoutes = []; 
const protectedRoutes = [ 
    // protected routes here 
].map((r:Route) => { 
    r.canActivate = (r.canActivate) ? [AuthGuard, ...r.canActivate] : [AuthGuard]; 
    return r; 
}); 

export const routeConfig = [...unprotectedRoutes, ...protectedRoutes]; 

私はすべてのルートに「LogGuard」(実際には何もガードしていませんが、ナビゲーションをログに記録します)を追加しています。

+0

Thanks @ j2L4e .. –

関連する問題