2016-06-30 8 views
2

私は、Router 3.0.0-aplha.8でAngular 2を使用しています。CanActivateをAngular 2で使用しているNoProviderError

CanActivate関数を使用して、ユーザーが認証されているかどうかを確認しようとしています。私はCanActivateを実装するAuthGuardを持っています。

route.ts

import { Injectable } from '@angular/core' 
import { provideRouter, RouterConfig, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from '@angular/router'; 

import { AuthGuard } from './auth-guard' 

import { SecurityComponent } from './security/security.component'; 
import { AdminDashboardComponent } from './admin/admin.dashboard.component'; 


export const mainRoutes: RouterConfig = [ 
{ path: '', component: SecurityComponent, }, 
{ path: 'admin', component: AdminDashboardComponent, terminal: true, canActivate: [AuthGuard] }] 

export const MAIN_ROUTER_PROVIDER = provideRouter(mainRoutes); 

のauth-guard.ts

import { Injectable } from '@angular/core'; 
import { 
    CanActivate, 
    Router, 
    ActivatedRouteSnapshot, 
    RouterStateSnapshot 
} from '@angular/router'; 

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private router: Router) {} 

    canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot){ 
     return true; 
    } 
} 

私は "/管理者" にアクセスしてみてください(AdminDashboardComponentは)、私はこのエラーを取得しています:

enter image description here

何が起こっているのか分かりません。誰か考えている?

おかげ イバン・

答えて

5

私はあなたが

export const MAIN_ROUTER_PROVIDER = [provideRouter(mainRoutes), AuthGuard]; 

MAIN_ROUTER_PROVIDERを変更した場合、それが動作するはずだと思います。

+0

ありがとうございました。このリストを含めるために、ブートストラップ機能を調整します!私は本当に立ち往生した。あなたの答えと@ ed-moralesの回答の違いは何ですか?ベストプラクティスは何ですか? もう一度おねがいします! – IvanMoreno

+0

彼は他のレベルの抽象化を持っています。 –

2

あなたも警備員をブートストラップする必要があるので、それらを適切に使用することができます:ここ

export const AUTH_PROVIDERS = [AuthGuard]; 

、その後

export const MAIN_ROUTER_PROVIDER = [ 
    provideRouter(mainRoutes), 
    AUTH_PROVIDERS, 
]; 

詳細https://angular.io/docs/ts/latest/guide/router.html#!#can-activate-guard

1

をあなたにもAuthGuardをブートストラップする必要があります。あなたのルートプロバイダが

export const MAIN_ROUTER_PROVIDER = [provideRouter(mainRoutes), AuthGuard]

以下のように更新し、bootstrap(appcomp,MAIN_ROUTER_PROVIDER)

関連する問題