对于使用Firebase作为数据库的AppInventor应用,我想为应用用户提供唯一的用户ID。在寻找一些选项之后,我认为我可以使用应用程序请求的Cloud HTTP功能,并且返回的数据将是UserId
生成的,只需增加UserId
{} {1}}表(不确定它是否也是一个)。
这就是故事,但是我无法进行以下代码部署(当我可以时,它不能像我期望的那样工作)。它正确地读取了最后一个UserIds
,但到目前为止我只能覆盖以前的数据。
它会在UserId
中的"."
中抛出意外的令牌错误。
functions.https
答案 0 :(得分:1)
Firebase身份验证包已为每个经过身份验证的用户提供自动生成的唯一ID,您可以从Web上的firebase.auth().currentUser.uid
和其他平台的类似方法获取该ID。
如果您仍想使用云功能生成自己的增量ID,则需要使用transaction,然后发回新ID,例如:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.generateUserId = functions.https.onRequest((req, res) => {
var ref = admin.database().ref('/lastUserId');
ref.transaction(function(current) {
return (current || 0) + 1;
}, function(error, committed, snapshot) {
if (error || !committed || !snapshot) {
console.error("Transaction failed abnormally!", error || "");
} else {
console.log("Generated ID: ", snapshot.val());
}
res.status(200).send(snapshot.val().toString());
});
});
这会使用事务递增数据库中的lastUserId
值,然后将此新ID作为响应发送回来(使用res.send()
),以便在调用应用中使用。