Refactor authentication flow
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				FarmMaps.Develop/FarmMapsLib/develop This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	FarmMaps.Develop/FarmMapsLib/develop This commit looks good
				
			This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| <div class="app fullscreen" (click)="handleClick($event)" [ngClass]="{'fullscreen' :(fullScreen|async)}"> | ||||
|   <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> | ||||
|     <button type="button" class="btn btn-light" (click)="handleToggleMenu($event)"><i class="fa fa-bars" aria-hidden="true"></i></button> | ||||
|     <router-outlet name="menu"></router-outlet> | ||||
|     <button type="button" class="btn btn-outline-light" (click)="handleToggleMenu($event)"><i class="fa fa-bars" aria-hidden="true"></i></button> | ||||
|     <router-outlet name="menu ml-4 float-right"></router-outlet> | ||||
|   </nav> | ||||
|   <div class="body"> | ||||
|     <router-outlet></router-outlet> | ||||
|   | ||||
| @@ -1,60 +1,67 @@ | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { | ||||
|   CanActivate, Router, CanLoad, Route, CanActivateChild , | ||||
|   ActivatedRouteSnapshot, | ||||
|   RouterStateSnapshot | ||||
| } from '@angular/router'; | ||||
|  | ||||
| import { Store } from '@ngrx/store'; | ||||
| import { OAuthService } from 'angular-oauth2-oidc'; | ||||
|  | ||||
|  | ||||
| import * as appCommonReducer from '../reducers/app-common.reducer' | ||||
| import * as appCommonActions from '../actions/app-common.actions'; | ||||
|  | ||||
|  | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
| }) | ||||
| export class AuthGuard implements CanActivate, CanLoad, CanActivateChild  {  | ||||
|   | ||||
|   private loginDispatched = false; | ||||
|   private initialized = false; | ||||
|   constructor(private oauthService: OAuthService, private router: Router, private store: Store<appCommonReducer.State> ) { } | ||||
|  | ||||
|   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { | ||||
|     let url: string = state.url; | ||||
|  | ||||
|     return this.checkLogin(url); | ||||
|   } | ||||
|  | ||||
|   canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { | ||||
|     let url: string = state.url; | ||||
|  | ||||
|     return this.checkLogin(url); | ||||
|   } | ||||
|  | ||||
|   canLoad(route: Route): boolean { | ||||
|     return this.checkLogin(route.path); | ||||
|   } | ||||
|  | ||||
|   checkLogin(url: string): boolean { | ||||
|     if (!this.oauthService.hasValidAccessToken()) { | ||||
|       if (!this.loginDispatched) { | ||||
|         this.oauthService.silentRefresh().then(info => { | ||||
|           this.router.navigateByUrl(url); | ||||
|         }).catch(error => { | ||||
|           this.loginDispatched = true; | ||||
|           this.store.dispatch(new appCommonActions.Login(url)); | ||||
|         }) | ||||
|       }      | ||||
|       return false; | ||||
|     } else { | ||||
|       if (!this.initialized) { | ||||
|         this.initialized = true; | ||||
|         this.store.dispatch(new appCommonActions.InitUser()); | ||||
|       } | ||||
|       return true; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { | ||||
|   CanActivate, Router, CanLoad, Route, CanActivateChild , | ||||
|   ActivatedRouteSnapshot, | ||||
|   RouterStateSnapshot | ||||
| } from '@angular/router'; | ||||
|  | ||||
| import { Store } from '@ngrx/store'; | ||||
| import { OAuthService } from 'angular-oauth2-oidc'; | ||||
|  | ||||
|  | ||||
| import * as appCommonReducer from '../reducers/app-common.reducer' | ||||
| import * as appCommonActions from '../actions/app-common.actions'; | ||||
|  | ||||
|  | ||||
| @Injectable({ | ||||
|   providedIn: 'root', | ||||
| }) | ||||
| export class AuthGuard implements CanActivate, CanLoad, CanActivateChild  {  | ||||
|   | ||||
|   private loginDispatched = false; | ||||
|   private initialized = false; | ||||
|   constructor(private oauthService: OAuthService, private router: Router, private store: Store<appCommonReducer.State> ) { } | ||||
|  | ||||
|   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { | ||||
|     let url: string = state.url; | ||||
|  | ||||
|     return this.checkLogin(url); | ||||
|   } | ||||
|  | ||||
|   canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { | ||||
|     let url: string = state.url; | ||||
|  | ||||
|     return this.checkLogin(url); | ||||
|   } | ||||
|  | ||||
|   canLoad(route: Route): boolean { | ||||
|     return this.checkLogin(route.path); | ||||
|   } | ||||
|  | ||||
|   checkLogin(url: string): boolean { | ||||
|     if (!this.oauthService.hasValidAccessToken()) { | ||||
|       debugger; | ||||
|       this.oauthService.responseType | ||||
|       if(this.oauthService.responseType == "code") | ||||
|         if(this.oauthService.getRefreshToken() != null ) { | ||||
|           this.oauthService.refreshToken().then(() => { | ||||
|             this.store.dispatch(new appCommonActions.InitUser()); | ||||
|             return true; | ||||
|           }).catch(() => { | ||||
|             this.oauthService.initCodeFlow(url); | ||||
|             return false; | ||||
|           }                 | ||||
|           ) | ||||
|         } else { | ||||
|           this.oauthService.initCodeFlow(url); | ||||
|           return false; | ||||
|         }               | ||||
|       else  | ||||
|         this.oauthService.initImplicitFlow(url); | ||||
|         return false; | ||||
|     } else { | ||||
|       this.store.dispatch(new appCommonActions.InitUser()); | ||||
|       return true; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -30,32 +30,16 @@ export function appConfigFactory(injector:Injector, appConfig: AppConfig, oauthS | ||||
|       }; | ||||
|       oauthService.setupAutomaticSilentRefresh(); | ||||
|       let location = injector.get(Location); | ||||
|       var urlPath =location.path(); | ||||
|       let router = injector.get(Router); | ||||
|       let urlPath = location.path(); | ||||
|       oauthService.loadDiscoveryDocument().then(() => { | ||||
|         oauthService.tryLogin({ | ||||
|           onTokenReceived: (info) => { | ||||
|             urlPath = info.state; | ||||
|           } | ||||
|         }).then(() => { | ||||
|           let router = injector.get(Router); | ||||
|           if (!oauthService.hasValidAccessToken()) { | ||||
|             if(appConfig.getConfig("grantType") == "code") | ||||
|               if(oauthService.getRefreshToken() != null ) { | ||||
|                 oauthService.refreshToken().then(() => { | ||||
|                   router.navigateByUrl(urlPath); | ||||
|                 }).catch(() => { | ||||
|                   oauthService.initCodeFlow(urlPath); | ||||
|                 }                 | ||||
|                 ) | ||||
|               } else { | ||||
|                 oauthService.initCodeFlow(urlPath); | ||||
|               }               | ||||
|             else  | ||||
|               oauthService.initImplicitFlow(urlPath); | ||||
|           } else { | ||||
|             router.navigateByUrl(urlPath); | ||||
|           } | ||||
|         });        | ||||
|           router.navigateByUrl(urlPath); | ||||
|         });     | ||||
|       }) | ||||
|     }); | ||||
|   } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user