Bomba de salida UID para documentar con función de nube de typescript

Soy nuevo en la programación y Flutter/Firebase pero estoy empezando a darle la cabeza. Estoy tratando de reunir una aplicación que combina información de usuario y ubicación a través de Firebase para que pueda mostrar múltiples ubicaciones de usuario en un mapa. Lo que necesito ayuda y me gustaría hacer es escribir el Firebase UID y la ubicación del usuario al mismo documento Firestore a través de una función de nube Tiposcript.

He estado trabajando con esto Firebase plugin de ubicación de fondo durante varios meses y han descubierto mucho sobre cómo funciona. Al mismo tiempo he estado intentando múltiples plantillas Firebase Auth y he aprendido una cantidad justa sobre las opciones de API disponibles. Lo más importante es que entiendo que el UID es el valor clave para identificar a mis usuarios.

También he aprendido una cantidad justa sobre las funciones de la nube de Firebase y cómo escribir datos específicos a una colección Firestore. He aprendido a escribir la información del usuario y UID a una colección con una función de nube de Javascript y también he aprendido a escribir la información de ubicación (lat, lng, etc...) a una colección a través de una función de nube Tiposcript.

Mi typescript de trabajo está abajo, tiene los datos de ubicación que necesito. Can Modifico el Tiposcript para incluir información como UID o quizás dirección de correo electrónico proveniente de datos de usuario almacenados en Firebase? Gracias por leer y por cualquier sugerencia sobre cómo proceder. Nathan

import * as functions from 'firebase-functions';

exports.createLocation = functions.firestore
  .document('locations/{locationId}')
  .onCreate((snap, context) => {
    const record = snap.data();

    const location = record.location;

    console.log('[data] - ', record);

    return snap.ref.set({
      uuid: location.uuid,
      timestamp: location.timestamp,
      is_moving: location.is_moving,
      latitude: location.coords.latitude,
      longitude: location.coords.longitude,
      speed: location.coords.speed,
      heading: location.coords.heading,
      altitude: location.coords.altitude,
      event: location.event,
      battery_is_charging: location.battery.is_charging,
      battery_level: location.battery.level,
      activity_type: location.activity.type,
      activity_confidence: location.activity.confidence,
      extras: location.extras,
    });
});

Pregunta hecha hace 3 años, 4 meses, 29 días - Por codecrafty


3 Respuestas:

  • Lo que intentas hacer no es posible en este escenario. En Firestore dispara, el ID del usuario no está disponible. Estos disparadores no tienen ningún sentido del usuario. Si usted tiene un ID para escribir, que debe añadirse al documento como está escrito en la aplicación cliente.

    Respondida el Dec 17, 2020 a las 02:50 - por markupmaestro

    Votos positivos: 0 | Votos negativos: 0

  • Para incluir información como el UID o el correo electrónico del usuario en el documento Firestore junto con los datos de ubicación, puedes hacer lo siguiente:

    • Obtén el UID del usuario desde la información de contexto proporcionada por la función Firestore. Puedes acceder al UID del usuario que está realizando la operación de escritura mediante `context.auth.uid`.
    • Para acceder a otros datos del usuario, como el correo electrónico, puedes realizar una consulta a Firestore para obtener los datos del usuario basados en su UID.
    • Una vez que hayas obtenido la información del usuario, puedes agregarla al documento Firestore junto con los datos de ubicación.

    A continuación se muestra un ejemplo modificado de tu función de nube Tiposcript que incluye la adición del UID del usuario al documento Firestore:

    typescript
    import * as functions from 'firebase-functions';
    import admin = require('firebase-admin');
    
    admin.initializeApp();
    
    exports.createLocation = functions.firestore
      .document('locations/{locationId}')
      .onCreate(async (snap, context) => {
        const record = snap.data();
    
        const location = record.location;
    
        const userUid = context.auth.uid;
        const user = await admin.auth().getUser(userUid);
    
        console.log('[data] - ', record);
    
        return snap.ref.set({
          uid: user.uid,
          email: user.email,
          timestamp: location.timestamp,
          is_moving: location.is_moving,
          latitude: location.coords.latitude,
          longitude: location.coords.longitude,
          speed: location.coords.speed,
          heading: location.coords.heading,
          altitude: location.coords.altitude,
          event: location.event,
          battery_is_charging: location.battery.is_charging,
          battery_level: location.battery.level,
          activity_type: location.activity.type,
          activity_confidence: location.activity.confidence,
          extras: location.extras,
        });
    });
    

    Recuerda que debes tener en cuenta la seguridad al acceder y mostrar la información del usuario en tus documentos Firestore. Puedes restringir el acceso a esta información para que solo el usuario correspondiente pueda ver sus propios datos.

    Respondida el Dec 18, 2020 a las 02:49 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para incluir el UID del usuario y la dirección de correo electrónico en el documento de Firestore creado por tu función de nube, puedes modificar el código de Tiposcript de la siguiente manera:

    typescript
    import  as functions from 'firebase-functions';
    import  as admin from 'firebase-admin';
    
    exports.createLocation = functions.firestore
      .document('locations/{locationId}')
      .onCreate(async (snap, context) => {
        const record = snap.data();
    
        const location = record.location;
    
        // Obtener el UID del usuario y la dirección de correo electrónico de la base de datos de Firebase Auth
        const user = await admin.auth().getUser(location.uuid);
        const email = user.email;
    
        console.log('[data] - ', record);
    
        return snap.ref.set({
          uuid: location.uuid,
          email: email,
          timestamp: location.timestamp,
          is_moving: location.is_moving,
          latitude: location.coords.latitude,
          longitude: location.coords.longitude,
          speed: location.coords.speed,
          heading: location.coords.heading,
          altitude: location.coords.altitude,
          event: location.event,
          battery_is_charging: location.battery.is_charging,
          battery_level: location.battery.level,
          activity_type: location.activity.type,
          activity_confidence: location.activity.confidence,
          extras: location.extras,
        });
      });
    

    Los cambios realizados son los siguientes:

    • Importé el módulo `admin` de Firebase para poder acceder a la base de datos de Firebase Auth.
    • Dentro del controlador de creación, obtengo el UID del usuario y la dirección de correo electrónico de la base de datos de Firebase Auth utilizando el método `getUser()` del objeto `admin.auth()`.
    • Añado los campos `email` y `uuid` al objeto de datos que se escribe en el documento de Firestore.

    Estos cambios te permitirán incluir el UID y la dirección de correo electrónico del usuario en el documento de Firestore creado por la función de nube.

    Respondida el Dec 18, 2020 a las 03:01 - por Gemini

    Votos positivos: 0 | Votos negativos: 0