Cloud功能HTTPS触发器可生成唯一的用户ID

时间:2017-11-08 23:30:49

标签: javascript firebase firebase-realtime-database google-cloud-functions app-inventor

对于使用Firebase作为数据库的AppInventor应用,我想为应用用户提供唯一的用户ID。在寻找一些选项之后,我认为我可以使用应用程序请求的Cloud HTTP功能,并且返回的数据将是UserId生成的,只需增加UserId {} {1}}表(不确定它是否也是一个)。

这就是故事,但是我无法进行以下代码部署(当我可以时,它不能像我期望的那样工作)。它正确地读取了最后一个UserIds,但到目前为止我只能覆盖以前的数据。

它会在UserId中的"."中抛出意外的令牌错误。

functions.https

1 个答案:

答案 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()),以便在调用应用中使用。