48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | // #docplaster
 | ||
|  | // #docregion
 | ||
|  | import { Injectable }       from '@angular/core'; | ||
|  | import { | ||
|  |   CanActivate, Router, | ||
|  |   ActivatedRouteSnapshot, | ||
|  |   RouterStateSnapshot, | ||
|  |   CanActivateChild, | ||
|  |   NavigationExtras | ||
|  | }                           from '@angular/router'; | ||
|  | import { AuthService }      from './auth.service'; | ||
|  | 
 | ||
|  | @Injectable() | ||
|  | export class AuthGuard implements CanActivate, CanActivateChild { | ||
|  |   constructor(private authService: AuthService, private router: Router) {} | ||
|  | 
 | ||
|  |   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { | ||
|  |     let url: string = state.url; | ||
|  | 
 | ||
|  |     return this.checkLogin(url); | ||
|  |   } | ||
|  | 
 | ||
|  |   canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { | ||
|  |     return this.canActivate(route, state); | ||
|  |   } | ||
|  | 
 | ||
|  |   checkLogin(url: string): boolean { | ||
|  |     if (this.authService.isLoggedIn) { return true; } | ||
|  | 
 | ||
|  |     // Store the attempted URL for redirecting
 | ||
|  |     this.authService.redirectUrl = url; | ||
|  | 
 | ||
|  |     // Create a dummy session id
 | ||
|  |     let sessionId = 123456789; | ||
|  | 
 | ||
|  |     // Set our navigation extras object
 | ||
|  |     // that contains our global query params and fragment
 | ||
|  |     let navigationExtras: NavigationExtras = { | ||
|  |       queryParams: { 'session_id': sessionId }, | ||
|  |       fragment: 'anchor' | ||
|  |     }; | ||
|  | 
 | ||
|  |     // Navigate to the login page with extras
 | ||
|  |     this.router.navigate(['/login'], navigationExtras); | ||
|  |     return false; | ||
|  |   } | ||
|  | } |