20/02/2018 Development / java script

Trabalhar com firebase é muuuuuuuuuuuuuuito produtivo! Super rapido fazer as paradas, subir aplicação, mas tem 2 coisas que eu vi que são chatinhas, uma eu já citei aqui que é o lance de não ter um JOIN decente no database, a outra, porém é necessário, é que a gente só consegue manipular os dados de usuários através do servidor. No client, não é possível fazer um firebase.auth().getUser(uid) por exemplo, e tem total sentido isso né!

Então, acaba que a gente tem que meter a mão na massa e fazer as Cloud Functions, que são tipos umas funções que você vai poder executar do lado do servidor. Nesse caso, eu precisei meeeeeesmo, fazer um CRUD pra manipular os dados de usuários. Então eu vou compartilhar com vocês. É só trocar a chave da public key, fazer o deploy e correr pro abraco!

const express = require('express');

const app = express();

const functions = require('firebase-functions');

const admin = require("firebase-admin");

const bodyParser = require('body-parser');

const cors = require('cors');

 

app.use(cors({ origin: true }));

app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());

 

admin.initializeApp({

  credential: admin.credential.cert({

    projectId: "AQUIVEMSEUPROJETO",

    clientEmail: "AQUIVEMOSEUEMAILPROVADO",

    privateKey: "-----BEGIN PRIVATE KEY-----AQUIVEMASUACHAVEPRIVADA==\n-----END PRIVATE KEY-----\n"

  }),

  databaseURL: "https://AQUIVEMOSEUPROJETO.firebaseio.com"

});

 

//GET

app.get('/:id', (req, res) => {

let uid = req.params.id;

admin.auth().getUser(uid)

  .then(function(userRecord) {

    resp.json(userRecord.toJSON());

  })

  .catch(function(error) {

    res.json(error);

  });

});

 

//POST

app.post('/', (req, res) => {

let data = req.body;

console.log(data);

 

admin.auth().createUser(data)

  .then(function(userRecord) {

    res.json(userRecord);

  })

  .catch(function(error) {

    res.json(error);

  });

});

 

//DELETE

app.delete('/:id', (req, res) => {

let uid = req.params.id;

admin.auth().deleteUser(uid)

  .then(function(userRecord) {

    res.json(userRecord.toJSON());

  })

  .catch(function(error) {

    res.json(error);

  });

});

 

//UPDATE

app.put('/:id', (req, res) => {

let uid = req.params.id;

let data = req.body;

admin.auth().updateUser(uid, data)

  .then(function(userRecord) {

    res.json(userRecord.toJSON());

  })

  .catch(function(error) {

    res.json(error);

  });

});

exports.api = functions.https.onRequest(app);

Espero que sirva!