From 3405c0302c6c8bd3b79d31ff2df37a902a388168 Mon Sep 17 00:00:00 2001 From: Patrick Knoop Date: Tue, 26 Apr 2022 21:45:03 +0200 Subject: [PATCH] fix: handle routes without path segments Protect lazy loaded routes without path segments with canLoad-Guard. --- src/okta/okta.guard.ts | 10 +++++----- test/spec/guard.test.ts | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/okta/okta.guard.ts b/src/okta/okta.guard.ts index 0cc9543c..1d31e1c1 100644 --- a/src/okta/okta.guard.ts +++ b/src/okta/okta.guard.ts @@ -17,7 +17,7 @@ import { ActivatedRouteSnapshot, RouterStateSnapshot, Router, - NavigationStart, + NavigationStart, Event, CanLoad, Route, @@ -36,10 +36,10 @@ export class OktaAuthGuard implements CanActivate, CanActivateChild, CanLoad { constructor( - @Inject(OKTA_CONFIG) private config: OktaConfig, - @Inject(OKTA_AUTH) private oktaAuth: OktaAuth, + @Inject(OKTA_CONFIG) private config: OktaConfig, + @Inject(OKTA_AUTH) private oktaAuth: OktaAuth, private injector: Injector - ) { + ) { this.onAuthRequired = this.config.onAuthRequired; // Unsubscribe updateAuthStateListener when route change @@ -59,7 +59,7 @@ export class OktaAuthGuard implements CanActivate, CanActivateChild, CanLoad { return true; } - const originalUri = segments[0].path; + const originalUri = segments.length > 0 ? segments[0].path : ''; await this.handleLogin(originalUri); return false; diff --git a/test/spec/guard.test.ts b/test/spec/guard.test.ts index 8a4d0c0d..3bc57c18 100644 --- a/test/spec/guard.test.ts +++ b/test/spec/guard.test.ts @@ -7,13 +7,13 @@ import { OKTA_CONFIG, } from '../../src/okta-angular'; import { AuthRequiredFunction } from '../../src/okta/models/okta.config'; -import { - ActivatedRouteSnapshot, - RouterStateSnapshot, - Router, - RouterState, - Route, - UrlSegment +import { + ActivatedRouteSnapshot, + RouterStateSnapshot, + Router, + RouterState, + Route, + UrlSegment } from '@angular/router'; import { Injector } from '@angular/core'; import { OktaAuth } from '@okta/okta-auth-js'; @@ -102,6 +102,11 @@ describe('Angular auth guard', () => { expect(oktaAuth.setOriginalUri).toHaveBeenCalledWith('http://fake.url/path?query=foo&bar=baz#hash=foo'); }); + it('calls "setOriginalUri" without route segments', async () => { + await guard.canLoad(route, []); + expect(oktaAuth.setOriginalUri).toHaveBeenCalledWith(''); + }); + it('onAuthRequired can be set on route', async () => { const mockFn = jest.fn(); route.data = {