在 Firebase Firestore 中注册时设置文档 ID

Posted

技术标签:

【中文标题】在 Firebase Firestore 中注册时设置文档 ID【英文标题】:Setting the doc ID on signup in firebase firestore 【发布时间】:2020-10-16 18:30:51 【问题描述】:

我正在尝试在注册时使用用户 UID 的 ID 创建一个新文档。但是,在测试时,什么都没有发生,甚至没有错误代码。

我认为这是“db.collection('users').doc("cred.user.uid").set(data);”的问题以及之后如何调用 then 函数...

这里对 javascript 和 firebase 非常陌生(仅 4 天),所以对于经验丰富的专业人士来说应该不难理解。

提前致谢!

Javascript

signupButton.addEventListener('click', signup);

function signup() 
    signupButton.style.display = 'none';
    signupError.style.display = 'none';

    // get user info
    var email = signupEmail.value;
    var password = signupPassword.value;

    // sign up the user
    firebase.auth().createUserWithEmailAndPassword(email, password).then(cred => 
        db.collection('users').doc("cred.user.uid").set(data);
        )
        .then(function() 
            window.location.replace('./dashboard/account.html');
        )
        .catch(function (error) 
            var errorCode = error.code;
            var errorMessage = error.message;
            console.log('Error code: ' + errorCode);
            console.log('Error message: ' + errorMessage);
            signupButton.style.display = 'flex';
            signupError.innerText = errorMessage;
            signupError.style.display = 'flex';
        );


    // Trigger button click on enter
    var input = document.getElementById("signupPasswordConfirm");

    // Execute a function when the user releases a key on the keyboard
    input.addEventListener("keyup", function(event) 
    // Number 13 is the "Enter" key on the keyboard
    if (event.keyCode === 13) 
        // Cancel the default action, if needed
        event.preventDefault();
        // Trigger the button element with a click
        document.getElementById("signupButton").click();
    
);

【问题讨论】:

【参考方案1】:

您似乎想从 Firestore 操作中返回承诺,以便稍后在承诺链中提取它以查明是否存在错误:

firebase.auth().createUserWithEmailAndPassword(email, password).then(cred => 
    return db.collection('users').doc("cred.user.uid").set(data);
)

注意return 语句传播set() 返回的承诺。

另外,您确定要按字面意思创建一个名为“cred.user.uid”的文档吗?这就是你在这里所做的。

【讨论】:

谢谢道格,我添加了return 声明,但似乎表格没有转到我的.then function 任何想法? firebase.auth().createUserWithEmailAndPassword(email, password).then(cred => return db.coldlection('users').doc(cred.user.uid).set(data); ).then(function() 我让它部分工作,但是它给了我Function DocumentReference.set() requires between 1 and 2 arguments, but was called with 0 arguments.@Doug Stevenson 的错误代码我怎样才能只在一个集合中创建一个只有一个文档 ID 而没有其他值的文档?跨度> 如果您有新问题,请单独发布并更详细地说明您正在尝试做的事情,以及没有按照您预期的方式工作。 张贴在这里,谢谢! ***.com/questions/62598411/…

以上是关于在 Firebase Firestore 中注册时设置文档 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 应用程序上过滤和排序 Firebase (Firestore) 数据

注册时无法将个人资料信息添加到 Firebase 集合中(vue | firebase)

Firebase 注册令牌和通知问题

当我使用 googleSignIn 时,用户在 Firestore 上重复

Flutter将图像上传到firebase存储然后将其写入firestore

Firestore上的空uid尝试使用flutter和firebase保存数据