【问题标题】:How do I link each user to their data in Firebase?如何将每个用户链接到他们在 Firebase 中的数据?
【发布时间】:2015-09-03 19:36:38
【问题描述】:

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

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

【问题讨论】:

    标签: javascript firebase firebase-authentication data-retrieval


    【解决方案1】:

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

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

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

    我将跳过实际的用户创建和登录,重点讨论有关存储和检索用户数据的问题。

    存储数据:(来源:Firebase Authentication)(旧来源:User Authentication

    // 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 指南中的一个简单示例:(来源:Read and Write data)(旧来源:@ 987654328@)

    //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"
            }
    

    【讨论】:

      【解决方案2】:

      虽然我同意 Andre 关于设置良好安全性规则的观点 - 我会以不同的方式处理数据。我没有生成字符串,而是使用 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()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-14
        • 2021-07-17
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-01
        相关资源
        最近更新 更多