Как связать аутентифицированных пользователей с коллекцией в Firestore? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь подключить пользователя к коллекции пользователей в 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)
        })

Но мой console.log (привет) не отображается.Я правильно подхожу к этому?Любой совет помогает!

1 Ответ

0 голосов
/ 13 марта 2019

Прямо сейчас, когда я создал учетную запись, я записал регистрационную информацию в базу данных.
В качестве имени документа задан UID пользователя, который Firebase предоставит пользователю.Теперь вы можете просто запросить данные из базы данных с 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
      });

Тогда, когда пользователь входит в систему, вы можете просто запросить данные через 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
        });
    });
});

Может быть, есть лучшие способы.(все еще учусь сам).Но это помогает мне и работает очень хорошо.

Необходимо помнить 2 вещи!

  1. Я бы порекомендовал Firestore для базы данных в реальном времени, так как она быстрее и безопаснее.
  2. Убедитесь, что правила вашей базы данных установлены правильно, чтобы никто не мог просмотреть / утечь информацию о вашей базе данных.(как вы регистрируете личную информацию пользователей).Если он не установлен правильно, пользователи смогут просматривать вашу базу данных и даже удалять все данные.

Надеюсь, это поможет:)

Если вы сами найдете лучший способ, сообщите нам об этом здесь.Мы могли бы извлечь уроки из этого!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...