Saltar al contenido

¿Cómo proteger el punto final HTTP de Firebase Cloud Function para permitir solo a los usuarios autenticados de Firebase?

Contamos con la mejor información que encontramos on line. Nosotros esperamos que te sirva de ayuda y si quieres aportar algo que nos pueda ayudar a mejorar hazlo libremente.

Hay una muestra de código oficial para lo que está tratando de hacer. Lo que ilustra es cómo configurar su función HTTPS para requerir un encabezado de Autorización con el token que el cliente recibió durante la autenticación. La función usa la biblioteca firebase-admin para verificar el token.

Además, puede usar “funciones a las que se puede llamar” para facilitar mucho este modelo, si su aplicación puede usar bibliotecas cliente de Firebase.

Como lo menciona @Doug, puedes usar firebase-admin para verificar un token. He configurado un ejemplo rápido:

exports.auth = functions.https.onRequest((req, res) => 
  cors(req, res, () => 
    const tokenId = req.get('Authorization').split('Bearer ')[1];
    
    return admin.auth().verifyIdToken(tokenId)
      .then((decoded) => res.status(200).send(decoded))
      .catch((err) => res.status(401).send(err));
  );
);

En el ejemplo anterior, también habilité CORS, pero eso es opcional. Primero, obtienes el Authorization cabecera y averiguar el token.

Entonces, puedes usar firebase-admin para verificar ese token. Obtendrá la información decodificada para ese usuario en la respuesta. De lo contrario, si el token no es válido, arrojará un error.

Como también mencionó @Doug, puede usar Callable Functions para excluir algún código repetitivo de su cliente y su servidor.

Ejemplo de función invocable:

export const getData = functions.https.onCall((data, context) => 
  // verify Firebase Auth ID token
  if (!context.auth) 
    return  message: 'Authentication Required!', code: 401 ;
  

  // do your things..
  const uid = context.auth.uid;
  const query = data.query;

  return  message: 'Some Data', code: 400 ;
);

Se puede invocar directamente desde su cliente así:

firebase.functions().httpsCallable('getData')(query).then(result => console.log(result));

No se te olvide compartir esta sección si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *