Configurando Nestjs com Firebase Admin

jackson_primo

jacksonPrimo

Posted on September 2, 2021

Configurando Nestjs com Firebase Admin

NestJs

Nestjs é um framework voltado para construção de aplicações nodejs de forma performática e escalável. Possui suporte a diferentes paradígmas de programação tais como programação orientada a objetos e funcional dando um toque de flexibilidade na hora de codar.

Firebase

O firebase é um Backend as a Service(BaaS), uma série de serviços em nuvem que abstraem taréfas repetitivas e pesadas para desenvolvedores tais como autenticação de usuário, armazenamento de dados dentre outros.

Lets Bora

Para iniciarmos um projeto nest usamos os seguintes comandos:

npm i -g @nestjs/cli //para instalar o nest cli de forma global
nest new project-name //para criar um projeto

Enter fullscreen mode Exit fullscreen mode

Ele vai pergutar qual gerenciador de pacotes deseja usar, no meu caso vou usar o yarn:

 Which package manager would you ❤️  to use?
  npm
> yarn
  pnpm
Enter fullscreen mode Exit fullscreen mode

Instale o firebase-admin:

yarn add firebase-admin
//ou
npm i firebase-admin
Enter fullscreen mode Exit fullscreen mode

Instale o dotenv para que os dados sensiveis do firebase sejam gravados em variáveis de ambiente e assim tornar mais segura estas informações:

yarn add dotenv
//ou
npm i dotenv
Enter fullscreen mode Exit fullscreen mode

No arquivo main.ts na pasta src inicialize o dotenv:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as dotenv from 'dotenv';

dotenv.config();

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 3000);
}
bootstrap();

Enter fullscreen mode Exit fullscreen mode

Dentro da pasta src crie um arquivo chamado firebase.config.ts, com as seguintes informações:

import * as firebase from 'firebase-admin';

export function initializeFirebase() {
    var serviceAccount = JSON.parse(process.env.FIREBASE);
    firebase.initializeApp({
        credential: firebase.credential.cert(serviceAccount),
        databaseURL: "https://exemplo-app.firebaseio.com"
    });
}

Enter fullscreen mode Exit fullscreen mode
  1. Importamos todo conteúdo de firebase-admin e nomeamos como firebase
  2. exportamos a função que irá inicializar a conexão
  3. pegamos as credênciais de uma variável de ambiente, que está em formato json e transformamos em um objeto com JSON.parse()
  4. chamamos as função firebase.initializeApp() passando as credenciais

Para obtermos as credenciais temos que ir no nosso projeto do firebase e em:

configuração do projeto

contas de serviço

gerar nova chave privada


Será iniciado o download de um arquivo JSON que conterá informações confidenciais do projeto usadas para fazer a integração, portanto tome cuidado onde deixa este arquivo e se possível o exclua após pegar suas informações. Ele terá as seguintes informações:

{
 "type": "service_account", 
 "project_id": "exemplo-app", 
 "private_key_id": "000000000000000000000000000000000000", 
 "private_key": "-----BEGIN PRIVATE KEY-----varias letras aleatórias-----END PRIVATE KEY-----\n", 
 "client_email": "firebase-adminsdk-xxx@exemplo-app.iam.gserviceaccount.com", 
 "client_id": "000000000000000", 
 "auth_uri": "https://accounts.google.comxxxxxx", 
 "token_uri": "https://xxxx.googleapis.com/token", 
 "auth_provider_x509_cert_url":"https://www.googleapis.com/xxx", 
 "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/xxxxgserviceaccount.com"
}

Enter fullscreen mode Exit fullscreen mode

Crie um arquivo .env na raiz de seu projeto e dentro dele crie uma variável de ambiente chamada FIREBASE, você deve setar seu valor colocando todas as credenciais do arquivo json em apenas uma linha:

//.env
FIREBASE={"type": "service_account", "project_id": "exemplo-app", "private_key_id": "000000000000000000000000000000000000", "private_key": "-----BEGIN PRIVATE KEY-----varias letras aleatórias-----END PRIVATE KEY-----\n", "client_email": "firebase-adminsdk-xxx@exemplo-app.iam.gserviceaccount.com", "client_id": "000000000000000", "auth_uri": "https://accounts.google.comxxxxxx", "token_uri": "https://xxxx.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/xxx", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/xxxxgserviceaccount.com"}
Enter fullscreen mode Exit fullscreen mode

Novamente no arquivo main.ts na pasta src, inicialize o firebaseConfig:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as dotenv from 'dotenv';
import { initializeFirebase } from './firebase.config';

dotenv.config();
initializeFirebase();

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 3000);
}
bootstrap();

Enter fullscreen mode Exit fullscreen mode

Podemos testar nossa integração criando um arquivo user.repository.ts dentro da pasta "src/repositorys":

import { Injectable } from "@nestjs/common";
import * as firebase from 'firebase-admin';
@Injectable()
export class UserRepository {
    private _collectionRef: FirebaseFirestore.CollectionReference = firebase.firestore().collection('user');
    public async getUser(UserId: string): Promise<any> {
         return this._collectionRef.doc(UserId).get();
    }
}
Enter fullscreen mode Exit fullscreen mode

finalizando

Bom com esta configuração você poderá gravar dados no banco do firebase, atualizar ou apagar dados de autenticação de usuário tais como senhas e emails etc. É isso, obrigado por lerem este artigo e espero que ele tenha os ajudado! :)
(caso não: coloque mais café na chicara e não desanime!).

💖 💪 🙅 🚩
jackson_primo
jacksonPrimo

Posted on September 2, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Configurando Nestjs com Firebase Admin