1.0.6-beta • Published 1 year ago

@monksdevsp/nest-authorizer v1.0.6-beta

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

Installation

npm i -S @monksdevsp/nest-authorizer

⚠️ This is the very first beta version of the Interceptor module for NestJS applications. It's still in test and development stage and not ready for production.

Quick start

In your environment variables you must create the variable that points to your service authorizer. Otherwise you will receive an exception due to the lack of environment variable configuration or if the service url is invalid:

AUTHORIZER_SERVICE=https://your-authorizer-url.com/your-end-point

The interceptor will extract the authorization bearer token and x-access-token from the header, or access_token parameter from the url using passport-jwt and will request the authorization service using the token extracted in the header to validate the token authenticity by the auth service rules:

...
ExtractJwt.fromAuthHeaderAsBearerToken(),
ExtractJwt.fromUrlQueryParameter('access_token'),
ExtractJwt.fromHeader('x-access-token'),
...

Import NeuronsAuthorizerModule into the root AppModule or any other module you want. The Authorizer module is a Global module with the @Global():

forRoot() configuration

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NeuronsAuthorizerModule } from '@monksdevsp/nest-authorizer';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot(),
    NeuronsAuthorizerModule.forRoot({
      authServiceUrl: process.env.AUTHORIZER_SERVICE_URL,
      consumer: 'my-service-name',
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Async configuration

forRootAsync()

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { NeuronsAuthorizerModule } from '@monksdevsp/nest-authorizer';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    NeuronsAuthorizerModule.forRootAsync({
      useFactory: async (configService: ConfigService) => ({
        authServiceUrl: configService.get('AUTHORIZER_SERVICE_URL'),
        consumer: 'my-service-name',
      }),
      inject: [ConfigService]
    })
  ],
})
export class AppModule {}

Afterward, the Neuron Authorizer will be available to inject on @UserInterceptors() annotation:

import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { NeuronsAuthorizerInterceptor } from '@monksdevsp/nest-authorizer';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @UseInterceptors(NeuronsAuthorizerInterceptor)
  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

To make the entire Controller authenticated, just move the interceptor decorator like this:

import { Controller, Get, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { NeuronsAuthorizerInterceptor } from '@monksdevsp/nest-authorizer';

@UseInterceptors(NeuronsAuthorizerInterceptor)
@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}
1.0.6-beta

1 year ago

1.0.5-beta

1 year ago

1.0.4-beta

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1-beta

1 year ago

1.0.0

1 year ago