2017-02-20 153 views
0

我試圖使用他們的教程添加Auth0的授權: https://auth0.com/docs/quickstart/spa/angular2/07-authorization如何將條件添加到路由

我使用NG2管理員,但他們有這樣一個不同的結構通常。我發現pages.routing.ts,並添加了第三個參數。我還從教程中提供了其他auth.guard服務。但是每當我去到我使用canActivate的頁面。它只是加載背景並說:EXCEPTION: Uncaught (in promise): Error: DI Error

我做了很多調試,我99%確定它是導致問題的canActivate。非其他類別甚至被稱爲。

在上auth0網站上的例子也提到:

export const appRoutingProviders: any[] = [ 
    AuthGuard 
]; 

這我嘗試添加,但這並沒有改變任何東西。

我想路由調用canActivate,以便我可以Auth0的身份驗證。

import { Routes, RouterModule } from '@angular/router'; 
import { Pages } from './pages.component'; 
import { ModuleWithProviders } from '@angular/core'; 
import { AuthGuard } from '../auth.guard'; 
export const routes: Routes = [ 
    { 
    path: 'login', 
    loadChildren: 'app/pages/login/login.module#LoginModule' 
    }, 
    { 
    path: 'register', 
    loadChildren: 'app/pages/register/register.module#RegisterModule' 
    }, 
    { 
    path: 'pages', 
    component: Pages, 
    children: [ 
     { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, 
     { path: 'dashboard', loadChildren: 'app/pages/dashboard/dashboard.module#DashboardModule',canActivate: [AuthGuard] }, 
     { path: 'editors', loadChildren: 'app/pages/editors/editors.module#EditorsModule',canActivate: [AuthGuard] }, 
     { path: 'components', loadChildren: 'app/pages/components/components.module#ComponentsModule',canActivate: [AuthGuard] }, 
     { path: 'charts', loadChildren: 'app/pages/charts/charts.module#ChartsModule',canActivate: [AuthGuard] }, 
     { path: 'ui', loadChildren: 'app/pages/ui/ui.module#UiModule',canActivate: [AuthGuard] }, 
     { path: 'forms', loadChildren: 'app/pages/forms/forms.module#FormsModule',canActivate: [AuthGuard] }, 
     { path: 'tables', loadChildren: 'app/pages/tables/tables.module#TablesModule',canActivate: [AuthGuard] }, 
     { path: 'maps', loadChildren: 'app/pages/maps/maps.module#MapsModule',canActivate: [AuthGuard] }, 
     { path: 'new', loadChildren: 'app/pages/new/new.module',canActivate: [AuthGuard] } 
    ] 
    } 
]; 
+0

是AuthGuard包含在您的提供者中的模塊定義中嗎? –

回答

2

在你的路由文件試試這個:

@NgModule({ 
    imports: [ 
    RouterModule.forRoot(routes), 
    ], 
providers: [ 
    AuthGuard //add AuthGuard to provider 
    ] 
}) 

您還可以添加AuthGuard到的AppModule提供商,這樣你就不需要提供它在每一個路由文件。

+1

https://angular.io/docs/ts/latest/guide/router.html#!#guards –

相關問題