Autenticación Firebase utilizando NodeJS

Hasta ahora estaba trabajando con Mongodb y Express. Allí se realizó toda la autenticación comprobando el objeto req.user . Por lo que vi, la autenticación Firebase se realiza principalmente en la parte frontal. ¿Cómo puedo hacer que req.user trabaje con Firebase en el back-end? Vi un par de tutoriales , pero solo mostraron un par de métodos y continuaron. Quiero preguntar más sobre la lógica, pero algunos ejemplos de código probablemente ayuden.

La autenticación Firebase se realiza principalmente en la parte delantera

Correcto. La autenticación del usuario se realiza completamente en el lado del cliente cuando se usan los SDK provistos por Firebase.

Sin embargo, si necesita realizar una autenticación especial, como la integración con LDAP / AD o algunos shenanigans empresariales, entonces deberá realizar una creación de token personalizada que los SDK del lado del cliente usarían para autenticar al usuario.

¿Cómo puedo hacer que req.user trabaje con Firebase en el back-end?

Esto es algo que necesitarás para implementarte. El lado del cliente de flujo sería algo así como:

  1. Usuario realiza autenticación del lado del cliente.
    • Firebase establecerá el estado de autenticación en localstorage de forma predeterminada. Ver la Persistencia del Estado de Autentificación.
  2. Cuando un usuario intente acceder a Express API, deberá recuperar el token de localstorage y enviarlo junto con su solicitud de API.

Supongamos que adjunta el token en el encabezado de la solicitud: FIREBASE_AUTH_TOKEN: abc . Consulte Firebase recuperar los datos de usuario almacenados en el almacenamiento local como firebase: authUser:

Por lo tanto, en el lado del servidor, con el SDK de administración de Firebase , recuperará ese token y lo verificará a través de verifyIdToken . Ejemplo sucio rápido debajo del middleware:

 const {auth} = require('firebase-admin'); const authService = auth(); exports.requiresAuth = async (req, res, next) => { const idToken = req.header('FIREBASE_AUTH_TOKEN'); // https://firebase.google.com/docs/reference/admin/node/admin.auth.DecodedIdToken let decodedIdToken; try { decodedIdToken = await authService.verifyIdToken(idToken); } catch (error) { next(error); return; } req.user = decodedIdToken; next(); } 

Entonces usarías este middleware así:

 const express = require('express'); const router = express.Router(); const {requiresLogin} = require('./my-middleware.js'); router.get('/example', requiresLogin, async (req, res) => { console.log(req.user) }) 

Espero que esto te dé una idea de qué hacer. No he trabajado con Firebase por un tiempo y la información anterior es lo que he recostackdo al consultar la documentación.

Si planea tener solo sesiones del lado del servidor, debe considerar el uso de cookies de sesión de Firebase: https://firebase.google.com/docs/auth/admin/manage-sessions .

Hay un ejemplo disponible para mostrar cómo usar httpOnly cookies de httpOnly en: https://github.com/firebase/quickstart-nodejs/tree/master/auth-sessions