50

我计划创建一个名为 users 的主树,其中包括用作用户名的不同用户的名称。因此,每个用户名都会包含他们的数据,例如全名、地址、电话号码。

我想知道如何在每个用户登录他们的个人资料时获取他们的数据。

4

2 回答 2

94

首先,我建议您花一些时间阅读Firebase 指南链接到旧 Firebase 指南)来熟悉firebase 。那里提供了回答您自己的问题所需知道的一切。但为简单起见,我将在这里举一个例子:

让我们从安全性开始,以下是本示例所需的基本 Firebase 规则:(来源:Understanding Security)(旧来源:Understanding Security

{
  "rules": {
    "users": {
      "$user_id": {
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

我将跳过实际的用户创建和登录,并专注于有关存储和检索用户数据的问题。

存储数据:(来源:Firebase 身份验证)(旧来源:用户身份验证

// Get a reference to the database service
var database = firebase.database();
// save the user's profile into Firebase so we can list users,
// use them in Security and Firebase Rules, and show profiles
function writeUserData(userId, name, email, imageUrl) {
  firebase.database().ref('users/' + userId).set({
    username: name,
    email: email
    //some more user data
  });
}

生成的 firebase 数据将如下所示:

{
  "users": {
    "simplelogin:213": {
      "username": "password",
      "email": "bobtony"
    },
    "twitter:123": {
      "username": "twitter",
      "email": "Andrew Lee"
    },
    "facebook:456": {
      "username": "facebook",
      "email": "James Tamplin"
    }
  }
}

最后但并非最不重要的是数据的检索,这可以通过多种方式完成,但对于这个示例,我将使用 firebase 指南中的一个简单示例:(来源:读取和写入数据)(旧来源:检索数据

//Get the current userID
var userId = firebase.auth().currentUser.uid;
//Get the user data
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
    //Do something with your user data located in snapshot
});

编辑:添加了返回数据的示例

因此,当您以用户 twitter:123 身份登录时,您将根据您的用户 ID 获得对该位置的引用,并将获得以下数据:

"twitter:123": {
          "username": "twitter",
          "email": "Andrew Lee"
        }
于 2015-06-18T10:21:10.773 回答
4

虽然我同意安德烈关于设置良好安全性的规则 - 我会以不同的方式处理数据。我没有生成字符串,而是使用该child()方法。这是个人喜好的问题。

获取 UID 并定义一个数据对象:

let user = firebase.auth().currentUser
let uid = user.uid
let yourdata = { foo: 'something', bar: 'other'}

保存数据:

firebase.database().ref('users').child(uid).set(yourdata)
    .then((data) => {
        console.log('Saved Data', data)
    })
    .catch((error) => {
        console.log('Storing Error', error)
    })    

获取数据:

firebase.database().ref('users').child(uid).once('value')
    .then((data) => {
        let fetchedData = data.val()
        console.log('Fetched Data', fetchedData)
    })
    .catch((error) => {
        console.log('Fetching Error', error)
    })    

请注意,这set()将覆盖您的数据,以便您以后可能要使用push()

于 2020-08-28T13:44:22.737 回答