LoginSignup
2
1

More than 3 years have passed since last update.

AngularのCanActivateでログイン成功後にログイン前のページへ遷移させたときのお話

Last updated at Posted at 2019-06-03

AngularのCanActiveで、未ログイン時にlogin画面へリダイレクトされる際に、リダイレクト前のURLを取得するお話。

そのページのURLを取得する情報はあったりしますが、意外とCanActiveでのURL取得の情報はなかったため書いてみました。

export class SessionGuard implements CanActivate {
  constructor(
    private sessionService: SessionService,
    private router: Router,
  ) {}

  canActivate(
    next: ActivatedRouteSnapshot,

    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

      if (!this.sessionService.session.token) { //もしセッション・トークンがなければ
            let navigationExtras: NavigationExtras = {
            queryParams : {
              'error': 'ログインして下さい。' , //表示するエラーの内容
              'prev_url': next.url //リダイレクト前のURL
            }
        };

        this.router.navigate(['/login'], navigationExtras); //ログイン画面にリダイレクト

      return false;
      }

    return true;
  }
}

どうやら、通常通りのActivateRouterから、URLを取得しようとすると、
もうひとつ前のページのURLを取得してしまうので、
next: ActivatedRouteSnapshot から、URLを取得する必要があるようです。

結構、英語の記事たと、こういった細かい内容の記事を見つけることができますが、
Angularでは、あまりないようですので、今後も書いていきたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1