如何将 auth 用户链接到 Firestore 中的集合?

Rac*_*lla 9 firebase react-native google-cloud-firestore

我正在尝试将用户连接到 firestore 中的用户集合。我正在使用云功能,但我认为我没有正确实施它。

firebase.auth().createUserWithEmailAndPassword(email, password)
    .then(() => {
        console.log('user created')
        exports.createUserDoc = functions.auth.user().onCreate((user) => {
            console.log("hi")
            const userId = user.uid;

            const account = {
                posts: []
            }
            return admin.firestore().collection("Users").doc(userId).add(account)
        })
Run Code Online (Sandbox Code Playgroud)

但是我的 console.log(hi) 没有出现。我正确地接近这个吗?任何建议都有帮助!

小智 7

现在我所做的是当用户创建一个帐户时,我会将登录信息记录到数据库中。
文档名称设置为 firebase 为用户提供的用户 UID。现在您可以简单地从数据库中请求数据,并将用户 UID 作为您的.doc(user.uid).

这是完整的代码。

  var htmlEmail = document.getElementById('email').value;
  var htmlPass = document.getElementById('password').value;
  var htmlUser = document.getElementById('username').value.toLowerCase();
  var auth = firebase.auth();


  var promise = auth.createUserWithEmailAndPassword(htmlEmail, htmlPass);
  // If there is any error stop the process.
  promise.catch(function (error) {
      var errorCode = error.code;
      console.log(`GOT ERROR: ` + errorCode)
      if (errorCode == 'auth/weak-password') return // password to weak. Minimal 6 characters
      if (errorCode == 'auth/email-already-in-use') return // Return a email already in use error
  });

  // When no errors create the account
  promise.then(function () {
      var userUid = auth.currentUser.uid;
      var db = firebase.firestore();

      db.collection('users').doc(userUid).set({
          email: htmlEmail,
          emailVertified: false,
          name: htmlUser,
          online: false,
          onlock: false,
          password: htmlPass
      });
Run Code Online (Sandbox Code Playgroud)

然后当用户登录时,您可以简单地通过 user.uid 请求数据。

var auth = firebase.auth();
firebase.auth().onAuthStateChanged(function (user) {

    // Lay connection with the database.
    var firestore = firebase.firestore();
    var db = firestore.collection('users').doc(user.uid);

    // Get the user data from the database.
    db.get().then(function (db) {
        // Catch error if exists. 
        promise.catch(function (error) {
            // Return error
        });

        promise.then(function () {
            // continue when success
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

可能只是有更好的方法。(还在学习自己)。但这对我有用,而且效果很好。

有2件事要记住!

  1. 我会推荐 Firestore 而不是实时数据库,因为它更快更安全。
  2. 确保您的数据库规则设置正确,以便没有人可以查看/泄露您的数据库信息。(因为您正在记录用户的个人信息)。如果设置不正确,用户将能够查看您的数据库甚至清除所有数据。

希望能帮助到你 :)

如果您自己找到更好的方法,请在这里告诉我们。我们也可以从中学习!