2.0.18 • Published 1 year ago

@origins-digital/nestjs-firebase-guard v2.0.18

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

@origins-digital/firebase-fan-guard

A NestJS guard package for Firebase authentication of fan users.

Installation

npm install @origins-digital/firebase-fan-guard

Features

  • Firebase token verification for fan authentication
  • Optional authentication support
  • Automatic public key caching
  • Fan payload extraction decorator
  • Swagger integration

Usage

Basic Setup

import { Module } from '@nestjs/common';
import { FirebaseFanGuardModule } from '@origins-digital/firebase-fan-guard';

@Module({
  imports: [
    FirebaseFanGuardModule.forRoot({
      publicKeyEndpoint: process.env.FIREBASE_PUBLIC_KEY_ENDPOINT,
    }),
  ],
})
export class AppModule {}

Controller Usage

import { Controller, Get } from '@nestjs/common';
import {
  AuthFirebaseFanGuard,
  FanPayloadParam,
} from '@origins-digital/firebase-fan-guard';
import { DecodedIdToken } from '@origins-digital/firebase-fan-guard';

@Controller('fan')
@AuthFirebaseFanGuard()
export class FanController {
  @Get('profile')
  getProfile(@FanPayloadParam() fanPayload: DecodedIdToken) {
    return {
      email: fanPayload.email,
      name: fanPayload.name,
      // ... other fan data
    };
  }
}

Optional Authentication

import { Controller, Get } from '@nestjs/common';
import {
  OptionalAuthFirebaseFanGuard,
  FanPayloadParam,
} from '@origins-digital/firebase-fan-guard';
import { DecodedIdToken } from '@origins-digital/firebase-fan-guard';

@Controller('fan')
@OptionalAuthFirebaseFanGuard()
export class FanController {
  @Get('profile')
  getProfile(@FanPayloadParam() fanPayload?: DecodedIdToken) {
    if (fanPayload) {
      return {
        email: fanPayload.email,
        name: fanPayload.name,
        // ... authenticated fan data
      };
    }
    return {
      // ... public fan data
    };
  }
}

Swagger Integration

import { Controller, Get } from '@nestjs/common';
import {
  ApiAuthFirebaseFanGuard,
  FanPayloadParam,
} from '@origins-digital/firebase-fan-guard';
import { DecodedIdToken } from '@origins-digital/firebase-fan-guard';

@Controller('fan')
@ApiAuthFirebaseFanGuard()
export class FanController {
  @Get('profile')
  getProfile(@FanPayloadParam() fanPayload: DecodedIdToken) {
    return {
      email: fanPayload.email,
      name: fanPayload.name,
    };
  }
}

Error Handling

The guard will throw the following exceptions:

  • BadRequestException: When client configuration is missing or email is not verified
  • UnauthorizedException: When token is missing or invalid

Configuration

The FirebaseFanGuardModule accepts the following configuration:

interface FirebaseFanGuardConfig {
  publicKeyEndpoint: string;
}

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

2.0.18

1 year ago

2.0.17

1 year ago

2.0.16

1 year ago

2.0.15

1 year ago

2.0.14

1 year ago

2.0.13

1 year ago

2.0.12

1 year ago

2.0.11

1 year ago

2.0.10

1 year ago

2.0.9

1 year ago

2.0.8

1 year ago

2.0.7

1 year ago

2.0.6

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

2.0.3

1 year ago

2.0.2

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago