gpt4 book ai didi

javascript - 云函数 HTTPS 触发器生成唯一的用户 ID

转载 作者:行者123 更新时间:2023-11-30 21:00:26 25 4
gpt4 key购买 nike

对于使用 Firebase 作为数据库的 AppInventor 应用程序,我想为应用程序用户提供唯一的用户 ID。在寻找了一些选项之后,我想到我可以使用应用程序请求的云 HTTP 函数,返回的数据将是一个 UserId,通过简单地递增最后一个 UserId< 生成UserIds 表中(也不确定它是否是一个)。

事情是这样的,但我无法部署以下代码(即使我可以,它也没有像我预期的那样工作)。它正确读取了最后一个 UserId,但到目前为止我只能让它覆盖以前的数据。

它在 functions.https 中的 ". 中抛出一个意外的标记错误。

const functions = require('firebase-functions');
// Import and initialize the Firebase Admin SDK.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

var LastUserId = function f() {return admin.database().ref('UserIds').limitToLast(1)}

exports.addWelcomeMessages = functions.https.onRequest((request, response)) => {
var ref = admin.database().ref('UserIds');
// this new, empty ref only exists locally
var newChildRef = ref.push();
// we can get its id using key()
console.log('my new shiny id is '+newChildRef.key());
// now it is appended at the end of data at the server
newChildRef.set({User : LastUserId + 1});
});

最佳答案

Firebase 身份验证包已经为每个经过身份验证的用户提供了一个自动生成的唯一 ID,您可以从 firebase.auth().currentUser.uid 获得它。在网络上和其他平台的类似方法。

如果您仍想使用 Cloud Functions 生成自己的增量 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() )以供调用应用程序使用。

关于javascript - 云函数 HTTPS 触发器生成唯一的用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47191500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com