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では、あまりないようですので、今後も書いていきたいと思います。