Возникли проблемы при доступе к базе данных Firebon с помощью ионного создателя - PullRequest
0 голосов
/ 03 июля 2018

Я начинающий IOS-разработчик, практикующий создание своего первого приложения. Однако я не могу получить доступ к данным в Firebase.

Например, у меня есть следующие данные: For example, I have the following data:

Я войду в приложение с именем пользователя и паролем, которые работают нормально, а затем использую:

var user = firebase.auth().currentUser;
console.log(user.email + " " + user.username);

Выше выводится «quanie.turner@gmail.com undefined», однако переменная имени пользователя четко определена в базе данных. Может быть, я что-то упустил или сделал что-то не так Буду признателен за любую помощь.

Редактировать: я сохранил данные в своем коде регистрации. Вот как (кстати: массив scope.data содержит переменную username):

function ($scope, $stateParams, $firebaseAuth, $firebaseArray, $state) {

    var auth = $firebaseAuth();
    var ref = firebase.database().ref('users');
    var users = $firebaseArray(ref);
    
    $scope.data = {};
    
    $scope.signup = function(){
        auth.$createUserWithEmailAndPassword($scope.data.email, $scope.data.password).then($scope.signupSuccess);
        
      
    }
    
    $scope.signupSuccess = function(){
        users.$add($scope.data);
        $state.go('login');
    }
}

Спасибо

1 Ответ

0 голосов
/ 03 июля 2018

Вы, кажется, путаете два продукта:

  1. Аутентификация Firebase, которая позволяет пользователям входить в ваше приложение и которая имеет профиль пользователя с фиксированным набором свойств.
  2. База данных Firebase, которая позволяет хранить данные и которая обычно используется для хранения дополнительных свойств для пользователя, которые не вписываются в его профиль Аутентификации Firebase.

Код, который вы прочитали из профиля пользователя из Firebase Authentication. Он ничего не читает из базы данных Firebase. Профиль пользователя в Firebase Authentication не имеет свойства username. имеет свойство displayName, но это опять-таки не имеет ничего общего с базой данных Firebase.

Похоже, вы сохранили дополнительную информацию о пользователях в базе данных Firebase с помощью вызова:

firebase.database().ref("users").push({ email: user.email, password: password, username: username })

Хотя это допустимый способ хранения данных в базе данных, он затрудняет поиск данных для пользователя с аутентификацией Firebase. Последние пользователи идентифицируются по их UID (user.uid), поэтому можно хранить дополнительные пользовательские свойства под /users/$uid:

firebase.database().ref("users").child(user.uid).set({ email: user.email, password: password, username: username })

Если у вас есть такая структура, вы можете загрузить дополнительные свойства для текущего пользователя с помощью:

var usersRef = firebase.database().ref("users");
usersRef.child(user.uid).once("value").then(function(snapshot) {
  console.log(snapshot.val());
});

С вашей текущей структурой вы можете также искать пользователя. Но поскольку в вашей структуре может быть несколько пользователей с одним и тем же адресом электронной почты, вам нужен запрос для него и необходимо учитывать тот факт, что запрос может соответствовать нескольким узлам:

var usersRef = firebase.database().ref("users");
var query = usersRef.orderByChild("email").equalTo(user.email);
query.once("value").then(function(snapshot) {
  snapshot.forEach(function(userSnapshot) {
    console.log(userSnapshot.val());
  });
});

Обновление

Насколько я вижу, вы должны заменить свой

users.$add($scope.data);

С

ref.child(firebase.auth().currentUser.uid).set($scope.data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...