【问题标题】:how to retrieve users data from firebase auth in react native?如何在本机反应中从firebase auth中检索用户数据?
【发布时间】:2018-07-20 09:27:34
【问题描述】:

我已手动为以下用户导入数据库的 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": "Naseebullah@kcl.ac.uk",
      "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": "Ernest@kcl.ac.uk",
      "profilePicture": "../Images/profile.jpg",
      "ECG": [""],
      "HeartSound": [""]
    }
  }
}

我手动创建了两个用户进行身份验证:

问题是当我以“Naseebullah”(naseebullah@kcl.ac.uk) 身份登录时,我没有收到他的详细信息:

"Naseebullah": {
  "name": "Naseebullah Ahmadi",
  "gender": "Male",
  "type": "Patient",
  "Doctors": ["Ernest"],
  "age": "20",
  "DOB": "02/06/1997",
  "address": "122 Atherstone Court",
  "contactNumber": "07473693312",
  "emailAddress": "Naseebullah@kcl.ac.uk",
  "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);
  });
};

当用户通过电子邮件和密码进行身份验证后,如何从数据库中检索用户的详细信息?

【问题讨论】:

  • 看起来email 在您的身份验证和数据库中很常见。所以首先从 auth 获取邮件,然后查询拥有特定邮件的用户并显示数据。
  • 您是否暗示我们将电子邮件作为对个人进行分类的唯一键?我认为这是不安全的,不是吗? @Hareesh
  • 有没有更好的替代方法?
  • 这是我认为您现在可以联系到当前用户的唯一方法。

标签: javascript firebase react-native firebase-realtime-database firebase-authentication


【解决方案1】:

身份验证子系统firebase.auth() 不是存储用户配置文件信息的位置。 firebase.auth() 将为每个用户创建一个 firebase.auth().currentUser.uid 唯一标识符,并可能提供一些详细信息,例如电子邮件地址、照片 URL 等。

创建一个users 集合并将每个用户的个人资料数据(例如年龄)存储在标识符为firebase.auth() uid 的文档中。

使用.onAuthStateChanged 检测用户登录状态并从数据存储中订阅(获取)用户配置文件数据。

【讨论】:

    【解决方案2】:

    使用您当前的数据库结构,您可以通过以下方式在 onLogin 方法中获取用户数据:

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

    获取当前用户数据。

    但是您不应该使用用户的名字作为users 节点中的键,如果您有两个名为 Ernest 的用户会发生什么?它将中断(您将删除第一个 Ernest 用户)。考虑改为使用 auth uid 作为键,保证唯一并绑定用户。

    【讨论】:

    • 说得好。我一直在努力如何设置 JSON 结构,以便将密钥用作身份的主要形式。我会在一分钟内更新你们。
    【解决方案3】:

    直接来自 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

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 2022-01-21
      • 2023-03-05
      • 2020-03-12
      • 2021-05-07
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多