es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener un token no firmado para un usuario desde el emulador de autenticación de Firebase sin utilizar la interfaz de usuario.

Estoy escribiendo un backend personalizado (nestjs) en el cual quiero verificar si el token de autenticación de firebase es válido y también obtener información del usuario.

No quiero utilizar la autenticación de firebase real, así que terminé utilizando el emulador local de firebase.

Ahora quiero probar mi endpoint escrito en nestjs usando postman, donde envío el token sin firmar desde postman para que nestjs lo verifique desde el emulador local. Pero no pude encontrar una forma de crear un token sin firmar sin crear una interfaz de usuario para lo mismo, realmente no quiero invertir tiempo en crear una aplicación de react solo para hacer console.log de un token. ¿Existe alguna forma mejor de hacer esto que pueda estar pasando por alto?

Gracias por la ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para probar tu endpoint en Nestjs utilizando Postman con un token no firmado desde el Emulador Local de Firebase, puedes utilizar la biblioteca Firebase JWT para crear un token no firmado de forma programática. Sigue los siguientes pasos:

    1. Instala la biblioteca Firebase JWT:
    npm install firebase-jwt --save
    
    1. Importa la biblioteca y crea un token no firmado:
    const firebaseJwt = require('firebase-jwt');
    const serviceAccount = require('path/to/firebase/serviceAccountKey.json');
    const uid = 'user-uid';
    
    const customToken = firebaseJwt.createCustomToken(uid, {}, serviceAccount.private_key);
    

    El archivo serviceAccountKey.json se puede descargar desde la Consola de Firebase. La función createCustomToken toma un uid, que debe ser el mismo que el almacenado en tu base de datos de Autenticación de Firebase.

    1. Envía el customToken a tu endpoint de Nestjs utilizando Postman.
    2. En el endpoint de Nestjs, verifica el token utilizando el SDK de Administración de Firebase:

    const firebaseAdmin = require('firebase-admin');
    const serviceAccount = require('path/to/firebase/serviceAccountKey.json');
    
    firebaseAdmin.initializeApp({
      credential: firebaseAdmin.credential.cert(serviceAccount),
    });
    
    // Esta función verifica el token y devuelve la información del usuario.
    function verifyToken(token) {
      return firebaseAdmin.auth().verifyIdToken(token);
    }
    
    // Ejemplo de endpoint de Nestjs
    app.get('/api/user', async (req, res) => {
      try {
        const token = req.headers.authorization.split(' ')[1];
        const userInfo = await verifyToken(token);
        res.send(userInfo);
      } catch (err) {
        res.status(401).send({ error: 'No autorizado' });
      }
    });
    

    Asegúrate de inicializar el SDK de Administración de Firebase con el mismo archivo serviceAccountKey.json. La función verifyIdToken verifica el token y devuelve la información del usuario como uid, email, etc.

    1. Prueba el endpoint en Postman enviando el encabezado Authorization con el valor Bearer {customToken}.

    Este enfoque te evita tener que crear una aplicación de React solo para generar tokens no firmados. Puedes crear y probar tu endpoint utilizando directamente Postman.

Comments are closed.