Tengo una función de nube de base de fuego:
const admin = require('firebase-admin'); const firebase_tools = require('firebase-tools'); const functions = require('firebase-functions'); admin.initializeApp(); exports.deleteUser = functions .runWith({ timeoutSeconds: 540, memory: '2GB' }) .https.onCall((data, context) => { const userId = context.auth.uid; var promises = []; // DELETE DATA var paths = ['users/' + userId, 'messages/' + userId, 'chat/' + userId, 'like/' + userId]; paths.forEach((path) => { promises.push( recursiveDelete(path).then( () => { return 'success'; } ).catch( (error) => { console.log('Error deleting user data: ', error); }) ); }); // DELETE FILES const bucket = admin.storage().bucket(); var image_paths = ["avatar/" + userId, "avatar2/" + userId, "avatar3/" + userId]; image_paths.forEach((path) => { promises.push( bucket.file(path).delete().then( () => { return 'success'; } ).catch( (error) => { console.log('Error deleting user data: ', error); }) ); }); // DELETE USER promises.push( admin.auth().deleteUser(userId) .then( () => { console.log('Successfully deleted user'); return true; }) .catch((error) => { console.log('Error deleting user:', error); }) ); return Promise.all(promises).then(() => { return true; }).catch(er => { console.error('...', er); }); }); function recursiveDelete(path, context) { return firebase_tools.firestore .delete(path, { project: process.env.GCLOUD_PROJECT, recursive: true, yes: true, token: functions.config().fb.token }) .then(() => { return { path: path } }).catch( (error) => { console.log('error: ', error); return error; }); } // [END recursive_delete_function]Estoy tratando de ejecutar esta función localmente desde un archivo javascript:
function deleteAccount(userId) { fetch( `https://us-central1-myappname.cloudfunctions.net/deleteUser/${userId}`, { method: "DELETE" } ); }Pero estoy recibiendo un:
La ejecución de la función deleteUser tomó 1952 ms, terminó con el código de estado: 204
Aquí está la URL de mi función en la nube de firebase:
Publicar una respuesta basada en mi comentario y los comentarios de los miembros de la comunidad anteriores para la visibilidad.
Según el comentario de stf_F, es una buena idea usar funciones invocables, ya que recuerda el estado y no es necesario pasar ningún UID para eliminar al usuario. O también puede delcare como se menciona en este documento .
const text = data.text; // Authentication / user information is automatically added to the request. const uid = context.auth.uid; const name = context.auth.token.name || null; const picture = context.auth.token.picture || null; const email = context.auth.token.email || null;index.js
Y puede verificar cómo eliminar usando callable en el siguiente documento .
Sin embargo, si prefiere usar fetch y si desea saber cómo obtener los datos en JSON y cómo guardarlos en HTML. Puedes consultar este artículo. Puede usar el siguiente ejemplo sobre cómo estructurar su recuperación
fetch(functionEndpoint) .then(res => res.json()) .then(function(data) { /** DO STUFF WITH YOUR DATA **/ }).catch(function(error) { console.log("Err is:" + err); });
Y a continuación, ejemplo de cómo usar obtener y obtener la información que necesita.
document.getElementById("output").innerHTML = JSON.stringify(data, null, 2); }
No olvide especificar la salida en su página HTML
<pre id="output"> </pre>
Y puede consultar el siguiente documento sobre cómo analizar los datos JSON recibidos y extraer UID, por ejemplo.