Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

548
Views
Use Firebase para Auth y MongoDB para DB

Estoy creando una aplicación móvil nativa de reacción con autenticación de usuario. Decidí usar la autenticación de Firebase porque es relativamente fácil de implementar.

Quiero usar mi propio backend (nodo, express) y mi propia base de datos (MongoDB) y necesito proteger mis llamadas API para verificar si el usuario está autenticado y si tiene permiso para realizar la operación.

Pero no me siento cómodo con la validación de tokens y no estoy seguro de hacerlo de la manera correcta...

Así es como estoy tratando de hacer una solicitud GET o POST simple desde el cliente (aplicación móvil):

En el cliente, recupero el token de usuario actual y lo envío en el encabezado de mi solicitud GET:

 firebase.auth().currentUser.getIdToken(true).then(token => { fetch('http://localhost:3000', { method: 'GET', mode: 'cors', headers: { 'AuthToken': token } }).then(res => res.json().then(res => console.log(res))) .catch(err => console.log(err))

En el servidor, uso un middleware para verificar el token gracias al administrador de Firebase.

 function checkAuth(req, res, next) { if (req.headers.authtoken) { admin.auth().verifyIdToken(req.headers.authtoken) .then((token) => { console.log(token) next() }).catch(() => { res.status(403).send('Unauthorized') }); } else { res.status(403).send('Unauthorized') } }

Entonces, para una solicitud de obtención simple de un usuario registrado, tengo que hacer lo siguiente:

  1. obtener el IdToken del usuario en el lado del cliente
  2. enviarlo al servidor
  3. compruébalo con base de fuego
  4. hacer la operación en mi base de datos
  5. enviar los datos de vuelta al cliente

¿Lo estoy haciendo de la manera correcta? No sé si debo almacenar el IdToken en la memoria del teléfono para evitar obtenerlo de Firebase cada vez (pero el token caduca después de 1 hora...)

Parece una gran cantidad de operaciones de "comprobación desde firebase" solo para una simple búsqueda ...

¿Me puede dar algún consejo sobre cómo hacer que todo esto sea más eficiente?

Muchas gracias !

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

En general, su flujo me parece correcto, pero hay algunas cosas que optimizaría.


Al pasar true a getIdToken(true) , lo obliga a actualizar el token cada vez antes de ejecutar su fetch .

No es necesario, ya que Firebase ya actualiza automáticamente el token de identificación en segundo plano. Por lo tanto, puede hacerlo con menos recursos y un poco más rápido con:

 firebase.auth().currentUser.getIdToken().then(token => { fetch('http://localhost:3000', { ...

Después de llamar a admin.auth().verifyIdToken(req.headers.authtoken) , obtiene un resultado que también muestra cuánto tiempo es válido el token. Por lo tanto, puede almacenar en caché el token verificado en algún lugar hasta que esté cerca de ese momento y usar esa versión almacenada en caché si obtiene la misma entrada. Eso le ahorra llamadas para verificar IdToken`.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!