2017-04-09 9 views
2

私は保護されたルート/protected-routeを持っています。認証ガード拒否のリダイレクトURLを角4で保存する

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

/* --- Services --- */ 
import { AuthenticationService } from './authentication.service'; 
import { StorageService } from './storage.service'; 

@Injectable() 
export class AuthenticatedRouteGuardService implements CanActivate { 

    constructor(private authenticationService: AuthenticationService, private 
router: Router, private routerStateSnapshot: RouterStateSnapshot) { } 

    canActivate() { 

    if (this.authenticationService.isAuthenticated()) { return true; } else { 

     console.log(this.routerStateSnapshot.url); 

     this.router.navigate(['/login']); 

     return false; 

    } 

    } 

} 

私がログイン成功後にユーザーをリダイレクトすることができるようにしようとした経路、すなわち/protected-routeを保存したい:authentication-guard.service.tsファイルには、有効なセッションが見つからない場合、ユーザは/loginに投げなければならないことを指示します。ユーザーが/loginにスローされる前に経路情報を取得できません。 router.urlactivatedRoute.snapshot.urlはどちらも空の値を返します。

+0

あなたは 'CanActivate'インターフェイスを実装していますか? yesの場合、 'canActivate'メソッドの中に' state'( 'RouteStateSnapshot')があります。' state.url'をどこかに保存し、ユーザが認証した後に使用します。 – developer033

+0

RouterStateSnapshotのプロバイダがないと言っています。ファイルを含めるために質問を更新する。 –

+0

あなたのメソッドは 'canActivate'メソッドを間違って実装しています.. – developer033

答えて

0

あなたAuthenticatedRouteGuardServiceで使用この

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    if (this.authenticationService.isAuthenticated()) { 
     return true; 
    } 

    this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }}); 
    return false; 
} 
関連する問題