Поиск информации пользователем на firebase

57
2

Это, наверное, очень просто, поэтому извините... Я пытаюсь создать приложение, в котором я могу создавать пользователей и хранить информацию Firebase. Вот пример:

http://image.noelshack.com/fichiers/2015/11/1426182307-log.png

Но теперь я хочу проверить, существует ли это имя, если кто-то хочет создать нового пользователя.

Как я собираюсь захватить индивидуальную пользовательскую информацию, не зная их идентификатор, например simplelogin: 54?

Я нашел этот раздел Получить пользователей по имени с использованием Firebase, но это не одно и то же, потому что в моем случае я не знаю детей после "Пользователи",

Ура,

спросил(а) 2015-03-12T20:46:00+03:00 5 лет, 7 месяцев назад
1
Решение
58

Как сказал Фрэнк, вы должны знать что-то о пользователе, чтобы иметь возможность посмотреть на него.

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

Предложения
    Начните с просмотра документации по Firebase Query.
Короткий ответ Чтобы проверить, существует ли пользователь с помощью свойства identifiant, вы должны orderByChild("identifiant") и запрос для конкретного пользователя с помощью .equalTo("<identifient_here>").

Например, чтобы проверить, является ли пользователь с идентификатором = "aaa",

var usersRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/Users");
var identifient = "aaa";
usersRef.orderByChild("identifiant").equalTo(identifient).once("value", function(snapshot) {
console.log("Loaded user by identifient:",identifient,snapshot.val());
});
Если вместо этого вы хотите запросить ключ (например, simplelogin:53), вы можете запросить с помощью orderByKey() вместо orderByChild()... или просто просто установите ref на пользовательский ключ следующим образом:
var userKey = 'simplelogin:53';
var userRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/Users" + userKey);
userRef.once("value", function(snapshot) {
console.log("Loaded user",snapshot.val());
});
Long (er) Отвечать

Пример с UserFactory

    Проверьте этот рабочий пример PLNKR. Он привязан к одному из моих публичных экземпляров Firebase. Я создал тот же simplelogin:53 пользователя в /Users как вы. Если вы ищете identifient= aaa, вы получите нужного пользователя. Реализация контроллера здесь, например, цели, и на самом деле ничего не стоит. Это просто для справки.

Данные

{
"Users" : {
"simplelogin:53" : {
"identifiant" : "aaa"
}
}
}

UserFactory

.factory('UserFactory', function($q, $firebaseObject, fbUrl){
return function(userId){
var deferred = $q.defer();
if (userId.isNotEmpty()) {
var userRef = new Firebase(fbUrl + '/Users/').orderByChild("identifiant").equalTo(userId);
userRef.once("value",
function(dataSnapshot){
if (dataSnapshot.val()) {
console.log("Loaded user",dataSnapshot.val());
deferred.resolve(dataSnapshot.val());
} else {
console.info("Couldn't find user by id",userId);
deferred.reject("No user found by identifient = '"+userId+"'");
}
},
function(error){
console.error("Error loading user",error);
deferred.reject(error);
}
);
} else {
deferred.reject("No id entered!");
}
return deferred.promise;
}
})

контроллер

.controller('HomeController',function($scope, UserFactory) {
$scope.identifient = '';
var showError = function(errorMessage) {
if (errorMessage) {
showUser(false);
$scope.error = errorMessage;
} else {
delete $scope.error;
}
}
var showUser = function (userObject) {
if (userObject) {
showError(false);
$scope.user = userObject;
} else {
delete $scope.user;
}
}
$scope.loadUser = function() {
var userPromise = new UserFactory($scope.identifient);
userPromise.then(function(data){
showUser(data);
}).catch(function(error){
showError(error);
});
}
})

шаблон

<div ng-controller="HomeController">
<h2>Home Template</h2>
<input ng-model="identifient" placeholder="identifient"/>
<button ng-click="loadUser()">Find User</button>
<hr/>
<div ng-if="user">User: {{user}}</div>
<div ng-if="error">Error: {{error}}</div>
</div>

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

ответил(а) 2015-03-13T01:55:00+03:00 5 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема