41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								// #docplaster
							 | 
						||
| 
								 | 
							
								// #docregion
							 | 
						||
| 
								 | 
							
								// #docregion can-activate-child
							 | 
						||
| 
								 | 
							
								import { Injectable }       from '@angular/core';
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  CanActivate, Router,
							 | 
						||
| 
								 | 
							
								  ActivatedRouteSnapshot,
							 | 
						||
| 
								 | 
							
								  RouterStateSnapshot,
							 | 
						||
| 
								 | 
							
								  CanActivateChild
							 | 
						||
| 
								 | 
							
								}                           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);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// #enddocregion can-activate-child
							 | 
						||
| 
								 | 
							
								  checkLogin(url: string): boolean {
							 | 
						||
| 
								 | 
							
								    if (this.authService.isLoggedIn) { return true; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Store the attempted URL for redirecting
							 | 
						||
| 
								 | 
							
								    this.authService.redirectUrl = url;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Navigate to the login page
							 | 
						||
| 
								 | 
							
								    this.router.navigate(['/login']);
							 | 
						||
| 
								 | 
							
								    return false;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								// #docregion can-activate-child
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								// #enddocregion
							 |