2016-11-22 9 views
1

ログインしている場合にのみ、モジュールにアクセスできるログインシステムがあります。そうでない場合、セッションが終了した場合は、ログインページにリダイレクトして保存しますセッションは私たちのいる場所のページに格納されます。したがって、ユーザーが再びログインしようとすると、彼はそのページに戻ります。 しかし、私は私のガードに問題が生じています:Angular2ガードとルーター

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private _router: Router, private _authUtils: AuthUtils) {} 

    canActivate(): boolean { 
    if(this._authUtils.isLogged()) { 
     return true 
    } 
    else { 
     window.sessionStorage.setItem('previousPage', this._router.url) 
     let link = ["/login", { previous: "true" }] 
     this._router.navigate(link) 
     return false 
    } 
    } 
} 

問題はthis._router.urlがまだ初期化されていないという事実から来ているので、「/」すべての時間を返します。私がそれを私のルートパスの1つに等しくするように強制すると、それは完全にうまく動作します。どのように私はこの問題を解決することができます考えていますか?

乾杯!

編集:ここでは

は、私は私のアプリ-routing.module.tsに持っているものです。

@NgModule({ 
    imports: [ 
     RouterModule.forRoot([ 
       { 
        path: 'myApp', 
        loadChildren: 'app/myApp.module#MyAppModule', 
        canActivate: [AuthGuard] 
       }, 
       { 
        path: 'login', 
        component: LoginComponent, 
        data: { 
         name: 'login' 
        } 
       }, 
       { 
        path: '**', 
        redirectTo: '/login', 
        pathMatch: 'full' 
       } 
      ] 
     ) 
    ], 
    exports: [ 
     RouterModule 
    ] 
}) 

export class AppRoutingModule {} 
+0

あなたAuthGuardを宣言あなたapp.moduleにコードを追加してください:

だから、私はあなたがあなたのAuthGuardに変更することができると思います。 – Maxime

+0

あなたはそこに何を見たいのですか?それは私のプロバイダに表示されるだけです:as:AuthGuard – Scipion

答えて

0

現在のURLを取得するためにcanActivateのparamaterからRouterStateSnapshotを使用することができます。

Plunker

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

// other import .... 

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private _router: Router, private _authUtils: AuthUtils) {} 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
    if(this._authUtils.isLogged()) { 
     return true 
    } 
    else { 
     window.sessionStorage.setItem('previousPage', state.url) 
     let link = ["/login", { previous: "true" }] 
     this._router.navigate(link) 
     return false 
    } 
    } 
} 
関連する問題