Как получить данные пользователей из Firebase Auth в реагировать родной?

1

Я вручную импортировал 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": [""]
    }
  }
}

и я вручную создал двух пользователей для аутентификации: Изображение 174551

Проблема в том, что когда я вхожу в систему как "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);
  });
};

Как я могу получить данные пользователя из базы данных, когда пользователь аутентифицирован с помощью электронной почты и пароля?

  • 0
    похоже, что email распространена в вашей аутентификации и базе данных. поэтому сначала получите письмо от auth, а затем запросите пользователей, у которых есть конкретный адрес электронной почты, и отобразите данные.
  • 0
    Вы подразумеваете, что мы делаем электронную почту уникальным ключом для классификации людей? Я думаю, что это небезопасно, нет? @Hareesh
Показать ещё 2 комментария
Теги:
firebase
react-native
firebase-authentication
firebase-realtime-database

3 ответа

0

Прямо с сайта Firebase:

 firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
   console.log("user: ", user);
   // User is signed in.
  } else {
   // No user is signed in.
  }
});

https://firebase.google.com/docs/auth/web/manage-users

0

Подсистема аутентификации firebase.auth() не предназначена для хранения информации профиля пользователя. firebase.auth() создаст уникальный идентификатор firebase.auth().currentUser.uid для каждого пользователя и может предоставить несколько деталей, таких как адрес электронной почты, photoURL и т.д.

Создайте коллекцию users и сохраните данные каждого профиля пользователя, такие как возраст, в документе, идентификатором которого является uid firebase.auth().

Используйте .onAuthStateChanged чтобы обнаружить состояние входа пользователя и подписаться (получить) данные профиля пользователя из хранилища данных.

0

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

firebase
  .database()
  .ref('users')
  .orderByChild('emailAddress')
  .equalTo(email)
  .once('value', snap => console.log(snap.val()));

Чтобы получить текущие пользовательские данные.

Однако вы не должны использовать имена пользователей в качестве ключей в узле users, что произойдет, если у вас есть два пользователя с именем Ernest? Он сломается (вы удалите первого пользователя Ernest). Вместо этого используйте вместо этого ключ auth uid, который гарантированно будет уникальным и привязан к пользователю.

  • 0
    Хорошо сказано на самом деле. Я изо всех сил пытался настроить структуру JSON, чтобы ключи могли использоваться в качестве основной формы идентичности. Я обновлю вас, ребята, через минуту.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню