我正在尝试创建一个firebasecloud函数。我想从context.prarams获取userId,但当我访问它时;用户ID 1:未定义";在函数日志中。
这是函数的代码:
exports.onTrxnCreate = functions.firestore.document('/trxns/{trxnId}').onCreate(async(snap, context) => {
const userId = context.params.userId;
console.log('UserID 1: ' + userId);
/*const userId = snap.ref.parent.parent.Id; THIS DIDN'T WORK */
console.log('A new transaction has been added');
const getUserDeviceToken = await db.collection('device').doc(userId).get();
const deviceTokens = getUserDeviceToken.data().deviceToken;
console.log('DeviceID: ' + deviceTokens);
if (deviceTokens == null) {
return console.error('No device tokens found');
}
let title = "Transaction added";
let body = "A new transaction has been added";
const payload = {
notification: { title: title, body: body},
data: {click_action: 'FLUTTER_NOTIFICATION_CLICK' }
};
const response = await admin.messaging().sendToDevice(deviceTokens, payload);
if (response.error) {
console.error("Error sending message: ", response.error);
} else {
return console.log("Message sent successfully!");
};
return Promise.all(console.log('End of function'));
});
如何获取此函数的userId?
如何获取此函数的userId?
我想你指的是创建触发云函数的Firestore文档的用户的userId。
默认情况下,这在Firestore触发的云函数中是不可能的。另一方面,具有auth
属性的实时数据库也是可能的。
如果你想获得创建Firestore文档的用户的userId,你应该:
- 将用户ID保存在文档中并通过
snap.data().userId;
获取,或者 - 使用userId作为Firestore文档ID,然后可以通过
params
属性获取它,因为它是Firestore文档路径中通配符的值之一
因此,在您的情况下,context.params.userId
未定义是正常的,因为Firestore文档路径中没有userId
通配符。