Я вручную импортировал JSON файл для базы данных со следующими пользователями:
{
"users": {
"Naseebullah": {
"name": "Naseebullah Ahmadi",
"gender": "Male",
"type": "Patient",
"Doctors": ["Ernest"],
"age": "20",
"DOB": "02/06/1997",
"address": "122 Atherstone Court",
"contactNumber": "07473693312",
"emailAddress": "[email protected]",
"profilePicture": "../Images/profile.jpg",
"ECG": [0, 0, 0, 0, 0.0000050048828125, 0.0000137939453125],
"HeartSound": [0, 0, 0, 0, 0.0000050048828125, 0.0000137939453125]
},
"Ernest": {
"name": "Ernest Kamavuako",
"gender": "Male",
"type": "Doctor",
"Patients": ["Naseebullah"],
"age": "30",
"DOB": "20/12/1970",
"address": "122 Harrow Street",
"contactNumber": "07473033312",
"emailAddress": "[email protected]",
"profilePicture": "../Images/profile.jpg",
"ECG": [""],
"HeartSound": [""]
}
}
}
и я вручную создал двух пользователей для аутентификации:
Проблема в том, что когда я вхожу в систему как "Naseebullah" ([email protected]), я не получаю его данные:
"Naseebullah": {
"name": "Naseebullah Ahmadi",
"gender": "Male",
"type": "Patient",
"Doctors": ["Ernest"],
"age": "20",
"DOB": "02/06/1997",
"address": "122 Atherstone Court",
"contactNumber": "07473693312",
"emailAddress": "[email protected]",
"profilePicture": "../Images/profile.jpg",
"ECG": [0, 0, 0, 0, 0.0000050048828125, 0.0000137939453125],
"HeartSound": [0, 0, 0, 0, 0.0000050048828125, 0.0000137939453125]
},
Другими словами, я не получаю его имя, пол и так далее...
Здесь я аутентифицируюсь:
const onLogin = creds => {
const { email, password } = creds;
//console.log("props123 ", values, nav);
firebase.auth().signInWithEmailAndPassword(email, password).then((user) => {
console.log("user: ", user);
/*
* User is logged in
*
* */
}).catch(err => {
const { code,message } = err;
console.log("not loggedin, ", message);
});
};
Как я могу получить данные пользователя из базы данных, когда пользователь аутентифицирован с помощью электронной почты и пароля?
Прямо с сайта Firebase:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log("user: ", user);
// User is signed in.
} else {
// No user is signed in.
}
});
Подсистема аутентификации firebase.auth()
не предназначена для хранения информации профиля пользователя. firebase.auth()
создаст уникальный идентификатор firebase.auth().currentUser.uid
для каждого пользователя и может предоставить несколько деталей, таких как адрес электронной почты, photoURL и т.д.
Создайте коллекцию users
и сохраните данные каждого профиля пользователя, такие как возраст, в документе, идентификатором которого является uid firebase.auth()
.
Используйте .onAuthStateChanged
чтобы обнаружить состояние входа пользователя и подписаться (получить) данные профиля пользователя из хранилища данных.
С вашей текущей структурой базы данных вы можете получить пользовательские данные в своем методе onLogin
, выполнив:
firebase
.database()
.ref('users')
.orderByChild('emailAddress')
.equalTo(email)
.once('value', snap => console.log(snap.val()));
Чтобы получить текущие пользовательские данные.
Однако вы не должны использовать имена пользователей в качестве ключей в узле users
, что произойдет, если у вас есть два пользователя с именем Ernest? Он сломается (вы удалите первого пользователя Ernest). Вместо этого используйте вместо этого ключ auth uid, который гарантированно будет уникальным и привязан к пользователю.
email
распространена в вашей аутентификации и базе данных. поэтому сначала получите письмо от auth, а затем запросите пользователей, у которых есть конкретный адрес электронной почты, и отобразите данные.