Я пытаюсь реализовать функцию поиска по электронной почте, а бэкенд - это хранилище данных firebase.запрос электронной почты в firebase в общедоступном разделе (реагировать на native, js), возвращающий нуль
правила безопасности
{
"rules": {
"users": {
"$uid":{
".read": "$uid === auth.uid ",
".write": "$uid === auth.uid"
}
},
"public": {
".read": "auth != null",
"$uid":{
".write": "$uid === auth.uid",
".indexOn": ["userEmail"],
}
}
}
}
Для этого, например, я пытаюсь найти других пользователей с помощью своей электронной почты в публичной части хранилища данных.
export const searchEmail = ({ searchText }) => {
return (dispatch) => {
firebase.database().ref()
.child('public/uid/profile')
.orderByChild('userEmail')
.equalTo(searchText)
// .startAt(`${searchText}`)
// .endAt(`${searchText}`)
.once('value', snapshot => {
dispatch({ type: SEARCH_EMAIL_SUCCESS, payload: snapshot.val() });
const foundUser = snapshot.val();
console.log('the found users are', foundUser);
//the snap.val() is the returned data that's returned
});
};
};
Я имею в виду его возвращение нулевой, потому что я не ссылаться на UID должным образом в пути, но я havn't удалось выяснить, как ссылаться на UID другого пользователя, кроме того, в настоящее время вошли в систему.
Альтернативой будет создание публичного раздела, который полностью открыт с помощью правил .write, которые отражают. Таким образом, UID не будет мешать.
Любые мысли? Заранее спасибо!
EDIT: Вот что журнал консоли выглядит следующим образом:
search text changing!
searching firebase now!
'searching txt is ', '[email protected]'
FIREBASE WARNING: Using an unspecified index. Consider adding ".indexOn": "userEmail" at /public/uid/profile to your security rules for better performance
{ type: 'search_email_success', payload: null }
'the found users are', null
Спасибо, что за быстрый ответ. Хотя, несмотря на то, что я добавляю 'return' его все еще null. – xclearner
Да, оглядываясь назад, я не совсем уверен, что должен делать код. Вы возвращаетесь с верхнего уровня, но также используете снимок в обратном вызове 'once()' и отправляете его на 'dispatch()'. Более вероятно, что ваш путь 'public/uid/profile'' неверен, поскольку вы, вероятно, хотите использовать значение' uid' ** ** для текущего пользователя: ''public /' + firebase.auth() .currentUser.uid + '/ profile''. –
Спасибо, Фрэнк! Извините, я не был таким ясным. отправка будет предлагать новое действие (SEARCH_EMAIL_SUCCESS), которое запускает новое состояние для страницы. В настоящее время я консоль регистрирует возврат, чтобы увидеть, работает ли механизм. Если я использую currentUser.uid, он возвращает только адрес currentUser, где, когда я пытаюсь вернуть искомый адрес электронной почты в хранилище данных. Имеет ли это смысл?Я довольно новичок в этом, поэтому я почти уверен, что я испортил путь где-то, потому что я не знал, как ссылаться на uid других пользователей на пути «pulic/uid/profile» хранилища данных – xclearner