尝试从应用中删除调用函数的用户数据。
'use strict';
const functions = require('firebase-functions');
const firebase_tools = require('firebase-tools');
const admin = require('firebase-admin');
const serviceAccount = require('./myapp.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://myapp.firebaseio.com"
});
let db = admin.firestore();
exports.mintAdminToken = functions.https.onCall((data, context) => {
const uid = data.uid;
return admin
.auth()
.createCustomToken(uid, { admin: true })
.then(function(token) {
return { token: token };
});
});
exports.recursiveDelete = functions
.runWith({
timeoutSeconds: 540,
memory: '1GB'
})
.https.onCall((data, context) => {
if (!(context.auth && context.auth.token )) {
throw new functions.https.HttpsError(
'permission-denied',
'Must be an administrative user to initiate delete.'
);
}
let path = data.path;
console.log(
`User ${context.auth.uid} has requested to delete path ${path}`
);
return firebase_tools.firestore
.delete(path, {
project: process.env.GCLOUD_PROJECT,
recursive: true,
yes: true,
token: functions.config().fb.token
})
.then(() => {
return {
path: path
};
});
});
我通过了这样的路径:
Map<String, Object> data = new HashMap<>();
data.put("path", "./users/rnAjpK4LLSMMlENZqe4l3F2");
结果:
Function execution took 540003 ms, finished with status: 'timeout'
问题可能出在路径上。如果我更改此行:
let path = admin.firestore().doc('users/' + context.auth.uid);
出现错误
未处理的错误TypeError:this.path.replace不是新FirestoreDelete的函数
“路径”有问题吗? 那么删除的正确路径是什么?
我使用的是这个示例for-in iteration proposal,但是这里没什么
已更新:
与 字符串路径=“ ./users/rnAjpK4LLSMMlENAgrZqe4l3F2”; 要么 字符串数据=“ ./users/rnAjpK4LLSMMlENAgrZqe4l3F2”;
错误
Unhandled error { FirebaseError: Must specify a path. at Object.reject (/srv/node_modules/firebase-tools/lib/utils.js:82:27)
答案 0 :(得分:0)
据我阅读code of the delete function所看到的,您传入的path
必须是要删除的集合或文档的单个字符串值。然后,该功能将删除该集合或文档下的所有数据。
答案 1 :(得分:0)
解决方案
const id = context.auth.uid;
const path = `users/${id}`;
答案 2 :(得分:0)
我不小心发送了整个对象。如果您遇到这个问题,请仔细检查您是否犯了同样的错误。