代码之家  ›  专栏  ›  技术社区  ›  JM007

如何在firestore文档ID的位置添加用户UID

  •  2
  • JM007  · 技术社区  · 6 年前

    我正在尝试在Firebase/Firestore中获取用户UID以代替自动生成的文档ID,但由于此错误,无法获取

    类型错误:firebase。身份验证(…)。currentUser为空

    这是我的索引。js文件:-

    // Firestore Cloud Database 
    var db = firebase.firestore();
    function reg(){
    //window.alert("Working..!");
    const txtname = document.getElementById('txtuname').value;
    const txtEmail = document.getElementById('txtemail').value;
    const txtPass = document.getElementById('txtpass').value;
    //window.alert(txtname);
     firebase.auth().createUserWithEmailAndPassword(txtEmail, txtPass).catch(function(error) {
            // Handle Errors here.
    
    
            var errorCode = error.code;
            var errorMessage = error.message;
            // [START_EXCLUDE]
            if (errorCode == 'auth/weak-password') {
              alert('The password is too weak.');
            } else {
              //alert(errorMessage);
            }
            console.log(error);
            // [END_EXCLUDE]
    
          });
    
     // Getting user id
    var uid = firebase.auth().currentUser.uid;
    //User Data Insertion
    if(uid !=null){
     db.collection("users").doc(uid).add({
        UserName: txtname,
        Email: txtEmail,
        Password: txtPass
    })
    // .then(function(uid) {
    //     console.log("Document written with ID: ", uid);
    // })
    .catch(function(error) {
        console.error("Error adding document: ", error);
    });
    }
    
    }
    
    3 回复  |  直到 6 年前
        1
  •  5
  •   Hoang Do    6 年前

    自从 firebase.auth().createUserWithEmailAndPassword(...) 是一个异步函数,您必须等待它解析后才能继续。

    您可以尝试以下操作:

    // Firestore Cloud Database 
    var db = firebase.firestore();
    function reg(){
        //window.alert("Working..!");
        const txtname = document.getElementById('txtuname').value;
        const txtEmail = document.getElementById('txtemail').value;
        const txtPass = document.getElementById('txtpass').value;
        //window.alert(txtname);
        firebase.auth().createUserWithEmailAndPassword(txtEmail,txtPass)
            .then(function (user) {
                // insert any document you want here
            })
            .catch(function(error) {
                // handle error here
            });
    
    }
    
        2
  •  1
  •   Samer    5 年前

    在我向您介绍我的答案之前,请注意,云函数确实会花费不可预测的时间来处理。因此,如果您需要立即开始使用存储在用户集合中的数据,那么这可能不是您应该采用的正确方法。

    使用firebase云函数。。

    exports.createUser = functions.auth.user().onCreate((user) => {
      const userMap = {
        uid: user.uid,
        email: user.email,
      };
      return admin.firestore().collection('user').doc(user.uid).set(userMap);
    });
    
        3
  •  0
  •   B.S.    3 年前

    您可以关联以下示例并生成代码

    在这里 "_email","_password","_city","_phone" 变量是

    onSaved: (value) => _email = value

    摘自 TextFormField() 作用

    代码:

    String userId = await widget.auth.createUserWithEmailAndPassword(_email, _password);
    
    print('Registered user: $userId');
    
    final new_user = await FirebaseFirestore.instance.collection('users').doc(userId).
          set({"UserUID":'$userId',"Email":_email,"Password":_password,"City":_city,"Phone 
    Number":_phone});