From 07f06a1f6778a086d2b2f74859aa505db6dff75e Mon Sep 17 00:00:00 2001 From: jannyHou Date: Sun, 6 Jan 2019 20:59:31 -0500 Subject: [PATCH] fix: optional auth metadata --- .../src/providers/auth-metadata.provider.ts | 5 +++-- .../unit/providers/auth-metadata.provider.unit.ts | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/authentication/src/providers/auth-metadata.provider.ts b/packages/authentication/src/providers/auth-metadata.provider.ts index 5e39bd5085c2..cdf5bad4a268 100644 --- a/packages/authentication/src/providers/auth-metadata.provider.ts +++ b/packages/authentication/src/providers/auth-metadata.provider.ts @@ -15,9 +15,9 @@ import {AuthenticationMetadata, getAuthenticateMetadata} from '../decorators'; export class AuthMetadataProvider implements Provider { constructor( - @inject(CoreBindings.CONTROLLER_CLASS) + @inject(CoreBindings.CONTROLLER_CLASS, {optional: true}) private readonly controllerClass: Constructor<{}>, - @inject(CoreBindings.CONTROLLER_METHOD_NAME) + @inject(CoreBindings.CONTROLLER_METHOD_NAME, {optional: true}) private readonly methodName: string, ) {} @@ -25,6 +25,7 @@ export class AuthMetadataProvider * @returns AuthenticationMetadata */ value(): AuthenticationMetadata | undefined { + if (!this.controllerClass || !this.methodName) return; return getAuthenticateMetadata(this.controllerClass, this.methodName); } } diff --git a/packages/authentication/test/unit/providers/auth-metadata.provider.unit.ts b/packages/authentication/test/unit/providers/auth-metadata.provider.unit.ts index 5f82a0e59169..bfe74652cc36 100644 --- a/packages/authentication/test/unit/providers/auth-metadata.provider.unit.ts +++ b/packages/authentication/test/unit/providers/auth-metadata.provider.unit.ts @@ -65,6 +65,17 @@ describe('AuthMetadataProvider', () => { ); expect(authMetadata).to.be.undefined(); }); + + it('returns undefined when the class or method is missing', async () => { + const context: Context = new Context(); + context + .bind(CoreBindings.CONTROLLER_METHOD_META) + .toProvider(AuthMetadataProvider); + const authMetadata = await context.get( + CoreBindings.CONTROLLER_METHOD_META, + ); + expect(authMetadata).to.be.undefined(); + }); }); });